GNU/Linux >> Znalost Linux >  >> Ubuntu

Jak nainstalovat nginx jako reverzní proxy pro Apache na Ubuntu 16.04

Tento tutoriál ukazuje, jak můžete nastavit nginx jako reverzní proxy před webovým serverem Apache2 na Ubuntu 16.04. nginx (vyslovováno jako "engine x") je bezplatný, open-source, vysoce výkonný HTTP server. nginx je známý svou stabilitou, bohatou sadou funkcí, jednoduchou konfigurací a nízkou spotřebou zdrojů.

1 předběžná poznámka

V tomto tutoriálu používám název hostitele server1.example.com s IP adresou 192.168.1.100. Tato nastavení se pro vás mohou lišit, takže je v případě potřeby musíte nahradit.

Předpokládám, že máte existující Apache vhost (v tomto tutoriálu použiji výchozí vhost Apache), který naslouchá na portu 80 na IP adrese 192.168.1.100, kterou chcete proxy přes nginx. Jako základ použiji výukový program Ubuntu LAMP. Upozorňujeme, že tento výukový program pokrývá pouze http, nikoli https (SSL).

2 Konfigurace Apache

První věc, kterou musíme udělat, je nakonfigurovat náš Apache vhost, aby naslouchal na localhost (127.0.0.1) na nepoužívaném portu jiném než 80 (např. 8000). Otevřete /etc/apache2/ports.conf...

nano /etc/apache2/ports.conf

... a upravit řádky NameVirtualHost a Listen pro port 80 tak, aby používal port 8000:

# Pokud pouze změníte port nebo zde přidáte další porty, budete pravděpodobně muset také
# změnit příkaz VirtualHost v
# /etc/apache2/sites-enabled/000-default. conf

Poslouchejte 8000


Poslouchejte 443



Poslouchejte 443

Dále otevřete konfigurační soubor vhost (např. /etc/apache2/sites-available/000-default.conf)...

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

... a změňte řádek tak, aby používal IP adresu 127.0.0.1 a port 8000:

[...]

Nakonfigurujeme nginx jako transparentní proxy, to znamená, že předá IP adresu původního uživatele v poli X-Forwarded-For backendovému Apache. Samozřejmě by měl backend Apache zaznamenávat IP adresu původního uživatele do svých přístupových protokolů namísto IP adresy nginx (127.0.0.1). Existují dva způsoby, jak toho dosáhnout:

1) Můžeme upravit řádek LogFormat v /etc/apache2/apache2.conf a nahradit %h za %{X-Forwarded-For}i:

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

2) Na Debian/Ubuntu můžeme nainstalovat modul Apache libapache2-mod-rpaf, který se stará o protokolování správné IP adresy:

apt-get -y install libapache2-mod-rpaf

Po všech těchto změnách restartujte Apache:

restart služby apache2

3 Konfigurace nginx

Pokud nginx ještě není nainstalován, nainstalujte jej následovně:

apt-get -y install nginx

Vytvořte jeho odkazy pro spuštění systému a ujistěte se, že je spuštěn:

systemctl povolí nginx.service
restart služby nginx

Nyní by měl naslouchat na portu 80.

Některé standardní parametry proxy jsou v souboru /etc/nginx/proxy_params:

nano /etc/nginx/proxy_params
hostitel proxy_set_header $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-Preto $scheme;

>

Protože tento soubor zahrneme později do proxy části našeho nginx vhost for example.com, možná budete chtít do tohoto souboru přidat další proxy direktivy, pokud chcete, např. takto:

hostitel proxy_set_header $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-Clize_0_0body $scheme; 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>premax_file_write_size 256k;

Nyní upravte výchozí vhost pro nginx – ujistěte se, že používá stejný kořen dokumentu jako Apache vhost for example.com (např. /var/www/html), aby nginx mohl doručovat statické soubory přímo bez předání požadavku Apache:

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

root /var/www/html;

# Přidejte index.php do seznamu, pokud používáte PHP
index index.html index.htm index.nginx-debian.html;

server_name _;

umístění / {
proxy_pass http://localhost:8000;
zahrnují /etc/nginx/proxy_params;
}
}

Toto je velmi jednoduchá konfigurace, která by proxy všechny požadavky na Apache.

Znovu načtěte nginx, aby se změny projevily:

znovu načtení služby nginx

Nyní můžete do prohlížeče zadat název hostitele serveru nebo IP 192.168.1.100 a měli byste vidět výchozí webovou stránku Apache, ale tentokrát poskytovanou prostřednictvím nginx.

Jak jsem již řekl, jedná se o velmi jednoduchou konfiguraci, která proxy posílá všechny požadavky do Apache. Ale protože nginx mnohem rychleji dodává statické soubory (jako jsou JavaScript, CSS, obrázky, soubory PDF, statické soubory HTML atd.) než Apache, je dobré nechat nginx tyto soubory obsluhovat přímo. To lze provést přidáním nového umístění pro tyto soubory, např. takto:

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

root /var/www/html;

# Přidat index. php do seznamu, pokud používáte PHP
index index.html index.htm index.nginx-debian.html;

název_serveru _;

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

Znovu načíst nginx:

znovu načtení služby nginx

Pro tyto soubory můžete dokonce nastavit hlavičku Expires HTTP, aby prohlížeče tyto soubory ukládaly do mezipaměti (další podrobnosti najdete v části Ukládání statických souborů do mezipaměti prohlížečů na nginx):

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

root /var/www/html;

# Přidat index. php do seznamu, pokud používáte PHP
index index.html index.htm index.nginx-debian.html;

název_serveru _;

umístění / {
proxy_pass http://localhost:8000;
include /etc/nginx/proxy_params;
} umístění ~* \.(js|css|jpg|jpeg|gif|png|svg| ico|pdf|html|htm)$ { vyprší 30d; }}

Nyní můžeme toto nastavení posunout o krok dále tím, že necháme nginx obsluhovat tolik požadavků, kolik dokáže splnit, a pouze předávat zbývající požadavky plus soubory PHP do Apache:

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

root /var/www/html;

# Přidat index. php do seznamu, pokud používáte PHP
index index.html index.htm index.nginx-debian.html;

název_serveru _;

umístění / {
proxy_pass http://localhost:8000;
include /etc/nginx/proxy_params;
} umístění ~* \.(js|css|jpg|jpeg|gif|png|svg| ico|pdf|html|htm)$ { vyprší 30d; } umístění @proxy { proxy_pass http://127.0.0.1:8000; zahrnout /etc/nginx/proxy_params; } umístění ~* \.php$ { proxy_pass http://127.0.0.1:8000; zahrnout /etc/nginx/proxy_params; }}

Znovu načíst nginx:

znovu načtení služby nginx

Toto nastavení můžete samozřejmě ještě více vyladit, například pomocí nginx proxy_cache (pokud to vaše aplikace umožňuje – musíte se například ujistit, že se captcha nebo nákupní košíky neukládají do mezipaměti a že přihlášení uživatelé vždy získejte novou kopii stránky) nebo pokud má vaše aplikace úplnou mezipaměť stránky - nginx by v takovém případě mohl přistupovat k mezipaměti celé stránky přímo (příklad najdete v tomto tutoriálu:Jak zrychlit Drupal 7.7 pomocí Boost And nginx (Debian Squeeze)).

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

Ubuntu
  1. Jak nainstalovat Odoo 10 na Ubuntu 16.04 s Apache jako reverzní proxy

  2. Jak nainstalovat Odoo 11 na Ubuntu 16.04 s Nginx jako reverzní proxy

  3. Jak nainstalovat Odoo 12 na Ubuntu 18.04 s Apache jako reverzní proxy

  1. Jak nastavit Nginx jako reverzní proxy na Ubuntu 20.04

  2. Jak nainstalovat Odoo 10 na Ubuntu 16.04 s Nginx jako reverzní proxy

  3. Jak nainstalovat Odoo 14 na Ubuntu 20.04 s Apache jako reverzní proxy

  1. Jak nakonfigurovat Nginx Reverse Proxy pro Kibana

  2. Jak nainstalovat Flectru na Ubuntu 20.04 s Nginx jako reverzní proxy

  3. Jak nainstalovat Odoo 12 na Ubuntu 18.04 s Nginx jako reverzní proxy