GNU/Linux >> Linux Esercitazione >  >> Ubuntu

Come installare nginx come proxy inverso per Apache su Ubuntu 16.04

Questo tutorial mostra come configurare nginx come proxy inverso davanti a un server Web Apache2 su Ubuntu 16.04. nginx (pronunciato "engine x") è un server HTTP gratuito, open source e ad alte prestazioni. nginx è noto per la sua stabilità, il ricco set di funzionalità, la configurazione semplice e il basso consumo di risorse.

1 Nota preliminare

In questo tutorial, utilizzo il nome host server1.example.com con l'indirizzo IP 192.168.1.100. Queste impostazioni potrebbero differire per te, quindi devi sostituirle dove appropriato.

Suppongo che tu abbia un vhost Apache esistente (in questo tutorial userò il vhost predefinito di Apache) che è in ascolto sulla porta 80 sull'indirizzo IP 192.168.1.100 che desideri eseguire il proxy tramite nginx. Userò il tutorial di Ubuntu LAMP come base. Tieni presente che questo tutorial copre solo http, non https (SSL).

2 Configurazione di Apache

La prima cosa che dobbiamo fare è configurare il nostro vhost Apache in ascolto su localhost (127.0.0.1) su una porta inutilizzata diversa da 80 (es. 8000). Apri /etc/apache2/ports.conf...

nano /etc/apache2/ports.conf

... e modifica le righe NameVirtualHost e Listen per la porta 80 per utilizzare la porta 8000:

# If you just change the port or add more ports here, you will likely also
# have to change the VirtualHost statement in
# /etc/apache2/sites-enabled/000-default.conf

Listen 8000

<IfModule ssl_module>
Listen 443
</IfModule>

<IfModule mod_gnutls.c>
Listen 443
</IfModule>

Quindi apri il file di configurazione di vhost (ad es. /etc/apache2/sites-available/000-default.conf)...

nano /etc/apache2/sites-available/000-default.conf

... e modificare la riga per utilizzare l'indirizzo IP 127.0.0.1 e la porta 8000:

<VirtualHost 127.0.0.1:8000>
[...]

Configureremo nginx come proxy trasparente, ovvero passerà l'indirizzo IP dell'utente originale in un campo chiamato X-Forwarded-For al backend Apache. Naturalmente, il back-end Apache dovrebbe registrare l'indirizzo IP dell'utente originale nei loro log di accesso invece dell'indirizzo IP di nginx (127.0.0.1). Ci sono due modi per raggiungere questo obiettivo:

1) Possiamo modificare la riga LogFormat in /etc/apache2/apache2.conf e sostituire %h con %{X-Forwarded-For}i:

nano /etc/apache2/apache2.conf
[...]
#LogFormat "%h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%{X-Forwarded-For}i %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
[...]

2) Su Debian/Ubuntu, possiamo installare il modulo Apache libapache2-mod-rpaf che si occupa di registrare l'indirizzo IP corretto:

apt-get -y install libapache2-mod-rpaf

Dopo tutte queste modifiche, riavvia Apache:

service apache2 restart

3 Configurazione di nginx

Se nginx non è già installato, installalo come segue:

apt-get -y install nginx

Crea i suoi collegamenti di avvio del sistema e assicurati che sia avviato:

systemctl enable nginx.service
service nginx restart

Ora dovrebbe essere in ascolto sulla porta 80.

Alcuni parametri proxy standard si trovano nel file /etc/nginx/proxy_params:

nano /etc/nginx/proxy_params
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;

Poiché includeremo quel file in seguito nella parte proxy del nostro nginx vhost per esempio.com, potresti voler aggiungere ulteriori direttive proxy a quel file se lo desideri, ad es. come segue:

proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme; client_max_body_size 100M; client_body_buffer_size 1m; proxy_intercept_errors on; proxy_buffering on; proxy_buffer_size 128k; proxy_buffers 256 16k; proxy_busy_buffers_size 256k; proxy_temp_file_write_size 256k; proxy_max_temp_file_size 0; proxy_read_timeout 300;

Ora modifica il vhost predefinito per nginx:assicurati che utilizzi la stessa radice del documento di Apache vhost per esempio.com (ad es. /var/www/html) in modo che nginx possa fornire file statici direttamente senza passare la richiesta ad Apache:

nano /etc/nginx/sites-available/default
server {
listen 80 default_server;
listen [::]:80 default_server;

root /var/www/html;

# Add index.php to the list if you are using PHP
index index.html index.htm index.nginx-debian.html;

server_name _;

location / {
proxy_pass http://localhost:8000;
include /etc/nginx/proxy_params;
}
}

Questa è una configurazione molto semplice che trasmetterebbe tutte le richieste ad Apache.

Ricarica nginx per rendere effettive le modifiche:

service nginx reload

Ora puoi digitare il nome host del server o l'IP 192.168.1.100 nel tuo browser e dovresti vedere il sito Web predefinito di Apache, ma questa volta consegnato tramite nginx.

Come ho detto prima, questa è una configurazione molto semplice che invia tramite proxy tutte le richieste ad Apache. Ma poiché nginx è molto più veloce nel fornire file statici (come JavaScript, CSS, immagini, file PDF, file HTML statici, ecc.) rispetto ad Apache, è una buona idea lasciare che nginx serva direttamente questi file. Questo può essere fatto aggiungendo una nuova posizione per questi file, ad es. come segue:

server {
       listen 80 default_server;
listen [::]:80 default_server;

root /var/www/html;

# Add index.php to the list if you are using PHP
index index.html index.htm index.nginx-debian.html;

server_name _;

location / {
proxy_pass http://localhost:8000;
include /etc/nginx/proxy_params;
} location ~* \.(js|css|jpg|jpeg|gif|png|svg|ico|pdf|html|htm)$ { } }

Ricarica nginx:

service nginx reload

Puoi anche impostare un'intestazione HTTP Expires per questi file in modo che i browser memorizzino nella cache questi file (per maggiori dettagli consulta Creare la cache dei browser con file statici su nginx):

server {
       listen 80 default_server;
listen [::]:80 default_server;

root /var/www/html;

# Add index.php to the list if you are using PHP
index index.html index.htm index.nginx-debian.html;

server_name _;

location / {
proxy_pass http://localhost:8000;
include /etc/nginx/proxy_params;
} location ~* \.(js|css|jpg|jpeg|gif|png|svg|ico|pdf|html|htm)$ { expires 30d; } }

Ora possiamo fare un ulteriore passo avanti con questa configurazione lasciando che nginx serva tutte le richieste che può soddisfare e passi solo le richieste rimanenti più i file PHP ad Apache:

server {
       listen 80 default_server;
listen [::]:80 default_server;

root /var/www/html;

# Add index.php to the list if you are using PHP
index index.html index.htm index.nginx-debian.html;

server_name _;

location / {
proxy_pass http://localhost:8000;
include /etc/nginx/proxy_params;
} location ~* \.(js|css|jpg|jpeg|gif|png|svg|ico|pdf|html|htm)$ { expires 30d; } location @proxy { proxy_pass http://127.0.0.1:8000; include /etc/nginx/proxy_params; } location ~* \.php$ { proxy_pass http://127.0.0.1:8000; include /etc/nginx/proxy_params; } }

Ricarica nginx:

service nginx reload

Naturalmente, puoi perfezionare ulteriormente questa configurazione, ad esempio utilizzando nginx proxy_cache (se la tua applicazione lo consente, ad esempio, devi assicurarti che i captcha o i carrelli della spesa non siano memorizzati nella cache e che gli utenti che hanno effettuato l'accesso ottenere sempre una nuova copia della pagina) o se la tua applicazione ha una cache a pagina intera - nginx potrebbe accedere direttamente alla cache a pagina intera in tal caso (puoi trovare un esempio in questo tutorial:Come velocizzare Drupal 7.7 con Boost And nginx (Debian Squeeze)).

  • nginx:http://nginx.net/
  • Apache:http://httpd.apache.org/
  • Ubuntu:http://www.ubuntu.com/

Ubuntu
  1. Come installare Odoo 10 su Ubuntu 16.04 con Apache come proxy inverso

  2. Come installare Odoo 11 su Ubuntu 16.04 con Nginx come proxy inverso

  3. Come installare Odoo 10 su Ubuntu 16.04 con Nginx come proxy inverso

  4. Come installare Flectra su Ubuntu 20.04 con Nginx come proxy inverso

  5. Come installare Odoo 12 su Ubuntu 18.04 con Nginx come proxy inverso

Come configurare Nginx come proxy inverso per Apache su Debian 11

Come installare Rocket.chat con proxy inverso nginx su Ubuntu 20.04

Come configurare Nginx come proxy inverso per Apache su Debian 11

Come installare Nginx su Ubuntu 15.04

Come configurare Nginx come proxy inverso per Apache su Ubuntu 18.04 VPS

Come installare NGINX come proxy inverso per Apache su Ubuntu 18.04