Saltar al contingut

Nginx

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).

Crea un fitxer de configuració nginx.conf:

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:

Terminal window
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:

Terminal window
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.sh
10-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.

Totes les sol·licituts i respostes HTTP inclouen capçaleres que contenen informació.

Si mires les capçaleres de les respostes localhost i example.com són identiques respecte el contingut:

Terminal window
curl -I localhost
HTTP/1.1 200 OK
Server: nginx/1.25.5
Date: Mon, 02 Jun 2025 09:56:49 GMT
Content-Type: text/html
Connection: keep-alive
ETag: "84238dfc8092e5d9c0dac8ef93371a07:1736799080.121134"
Last-Modified: Mon, 13 Jan 2025 20:11:20 GMT
Cache-Control: max-age=1641
Terminal window
curl -I example.com
HTTP/1.1 200 OK
Content-Type: text/html
ETag: "84238dfc8092e5d9c0dac8ef93371a07:1736799080.121134"
Last-Modified: Mon, 13 Jan 2025 20:11:20 GMT
Cache-Control: max-age=1855
Date: Mon, 02 Jun 2025 09:57:20 GMT
Connection: keep-alive

El ETag és el mateix!

Crea un contenidor “echo” perquè ens torni un document JSON amb el contingut de la sol·licitut HTTP.

Terminal window
docker run --name echo -d -p 8080:8080 mendhak/http-https-echo:37

Instal·la jq:

Terminal window
sudo apt install -y jq

Aquestes són les capçaleres que envía curl en la sol·licitut HTTP:

Terminal window
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.

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