Nginx
Introducció
Section titled “Introducció”Un proxy invers (“reverse proxy”) fa referència a un servidor encarregat de mostrar contingut d’un o més servidors que alhora romanen ocults del client o usuari.
Un dels “reverse proxy” més utilitzats com a frontal web és nginx.
Crea una màquina Windows Subsytem for Linux (WSL).
Location
Section titled “Location”Crea un fitxer de configuració nginx.conf
:
server { listen 80;
location / { proxy_pass http://example.com; }}
La directiva server configura nginx perquè escolti al port 80.
La directiva proxy_pass
dins de [location
](https://nginx.org/en/docs/http/ngx_http_core_module.html#location, configura nginx per passar la sol·licitud a un servidor intermediari HTTP.
La funcionalitat de proxy invers s’habilita a través de la directiva proxy_pass.
Amb aquesta configuració, obrir un navegador a la màquina virtual serà el mateix que obrir un navegador a http://example.com.
Arrenca un servidor nginx amb Docker:
docker run --name nginx -d -p 80:80 -v $(pwd)/nginx.conf:/etc/nginx/conf.d/default.conf:ro nginx:1.25
Pots veure que nginx es configura amb un fitxer de només lectura:
docker logs nginx
/docker-entrypoint.sh: /docker-entrypoint.d/ is not empty, will attempt to perform configuration/docker-entrypoint.sh: Looking for shell scripts in /docker-entrypoint.d//docker-entrypoint.sh: Launching /docker-entrypoint.d/10-listen-on-ipv6-by-default.sh10-listen-on-ipv6-by-default.sh: info: can not modify /etc/nginx/conf.d/default.conf (read-only file system?)
Obre un navegador a http://localhost:
El contingut és el mateix que el de la pàgina http://example.com.
HTTP Headers
Section titled “HTTP Headers”Totes les sol·licituts i respostes HTTP inclouen capçaleres que contenen informació.
Response
Section titled “Response”Si mires les capçaleres de les respostes localhost i example.com són identiques respecte el contingut:
curl -I localhost
HTTP/1.1 200 OKServer: nginx/1.25.5Date: Mon, 02 Jun 2025 09:56:49 GMTContent-Type: text/htmlConnection: keep-aliveETag: "84238dfc8092e5d9c0dac8ef93371a07:1736799080.121134"Last-Modified: Mon, 13 Jan 2025 20:11:20 GMTCache-Control: max-age=1641
curl -I example.com
HTTP/1.1 200 OKContent-Type: text/htmlETag: "84238dfc8092e5d9c0dac8ef93371a07:1736799080.121134"Last-Modified: Mon, 13 Jan 2025 20:11:20 GMTCache-Control: max-age=1855Date: Mon, 02 Jun 2025 09:57:20 GMTConnection: keep-alive
El ETag
és el mateix!
Request
Section titled “Request”Crea un contenidor “echo” perquè ens torni un document JSON amb el contingut de la sol·licitut HTTP.
docker run --name echo -d -p 8080:8080 mendhak/http-https-echo:37
Instal·la jq
:
sudo apt install -y jq
Aquestes són les capçaleres que envía curl
en la sol·licitut HTTP:
curl localhost:8080 | jq ".headers"
{ "host": "localhost:8080", "user-agent": "curl/8.5.0", "accept": "*/*"}
Configura nginx perquè en lloc de fer proxy a example.com
faci proxy a echo
.
Modifica la configuració de nginx :
server { listen 80; location / { proxy_pass http://localhost:8080; }}
Torna a carregar nginx amb la nova configuració:
docker restart nginx
Pots veure que el servidor echo rep uns paràmetres de sol·licitut diferents:
De manera predeterminada, NGINX redefineix dos camps de capçalera a les sol·licituds proxy:
- La capçalera host té com a valor la variable
$proxy_host
. - La capçalera connection té com a valor
close
.
S’ha d’acabar d’importar el document de Google Docs Nginx
El contingut d'aquest lloc web té llicència CC BY-NC-ND 4.0.
©2022-2025 xtec.dev