GNU/Linux >> LINUX-Kenntnisse >  >> Ubuntu

So installieren Sie nginx als Reverse Proxy für Apache unter Ubuntu 16.04

Dieses Tutorial zeigt, wie Sie nginx als Reverse-Proxy vor einem Apache2-Webserver unter Ubuntu 16.04 einrichten können. nginx (ausgesprochen „engine x“) ist ein kostenloser, leistungsstarker Open-Source-HTTP-Server. nginx ist bekannt für seine Stabilität, seinen umfangreichen Funktionsumfang, seine einfache Konfiguration und seinen geringen Ressourcenverbrauch.

1 Vorbemerkung

In diesem Tutorial verwende ich den Hostnamen server1.example.com mit der IP-Adresse 192.168.1.100. Diese Einstellungen können für Sie abweichen, daher müssen Sie sie gegebenenfalls ersetzen.

Ich gehe davon aus, dass Sie einen vorhandenen Apache-Vhost haben (ich werde den Apache-Standard-Vhost in diesem Tutorial verwenden), der auf Port 80 auf der IP-Adresse 192.168.1.100 lauscht, die Sie über nginx weiterleiten möchten. Ich werde das Ubuntu LAMP-Tutorial als Grundlage verwenden. Bitte beachten Sie, dass dieses Tutorial nur http behandelt, nicht https (SSL).

2 Apache konfigurieren

Das erste, was wir tun müssen, ist, unseren Apache-Vhost so zu konfigurieren, dass er auf localhost (127.0.0.1) auf einem anderen unbenutzten Port als 80 (z. B. 8000) lauscht. Öffnen Sie /etc/apache2/ports.conf...

nano /etc/apache2/ports.conf

... und ändern Sie die Zeilen NameVirtualHost und Listen für Port 80, um Port 8000 zu verwenden:

# 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>

Öffnen Sie als nächstes die vhost-Konfigurationsdatei (z. B. /etc/apache2/sites-available/000-default.conf)...

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

... und ändern Sie die -Zeile, um die IP-Adresse 127.0.0.1 und den Port 8000 zu verwenden:

<VirtualHost 127.0.0.1:8000>
[...]

Wir werden nginx als transparenten Proxy konfigurieren, d.h. es wird die IP-Adresse des ursprünglichen Benutzers in einem Feld namens X-Forwarded-For an den Backend-Apache weitergeben. Natürlich sollte der Backend-Apache statt der IP-Adresse von nginx (127.0.0.1) die IP-Adresse des ursprünglichen Benutzers in seinen Zugriffsprotokollen protokollieren. Es gibt zwei Möglichkeiten, dies zu erreichen:

1) Wir können die LogFormat-Zeile in /etc/apache2/apache2.conf ändern und %h durch %{X-Forwarded-For}i:

ersetzen
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) Auf Debian/Ubuntu können wir das Apache-Modul libapache2-mod-rpaf installieren, das sich um die Protokollierung der korrekten IP-Adresse kümmert:

apt-get -y install libapache2-mod-rpaf

Starten Sie nach all diesen Änderungen Apache neu:

service apache2 restart

3 Konfiguration von nginx

Wenn nginx noch nicht installiert ist, installieren Sie es wie folgt:

apt-get -y install nginx

Erstellen Sie seine Systemstart-Links und stellen Sie sicher, dass es gestartet wird:

systemctl enable nginx.service
service nginx restart

Es sollte jetzt auf Port 80 lauschen.

Einige Standard-Proxy-Parameter befinden sich in der Datei /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;

Da wir diese Datei später in den Proxy-Teil unseres nginx vhost for example.com aufnehmen werden, möchten Sie dieser Datei möglicherweise weitere Proxy-Anweisungen hinzufügen, wenn Sie möchten, z. wie folgt:

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;

Ändern Sie jetzt den Standard-vhost für nginx – stellen Sie sicher, dass er denselben Dokumentenstamm wie der Apache-vhost für example.com verwendet (z. B. /var/www/html), damit nginx statische Dateien direkt bereitstellen kann, ohne die Anfrage an Apache weiterzuleiten:

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;
}
}

Dies ist eine sehr einfache Konfiguration, die alle Anfragen an Apache weiterleitet.

Laden Sie nginx neu, damit die Änderungen wirksam werden:

service nginx reload

Sie können jetzt den Server-Hostnamen oder die IP 192.168.1.100 in Ihren Browser eingeben, und Sie sollten die Apache-Standardwebsite sehen, diesmal jedoch über nginx.

Wie ich bereits sagte, ist dies eine sehr einfache Konfiguration, die alle Anfragen an Apache weiterleitet. Da nginx statische Dateien (wie JavaScript, CSS, Bilder, PDF-Dateien, statische HTML-Dateien usw.) viel schneller liefert als Apache, ist es eine gute Idee, diese Dateien direkt von nginx bereitstellen zu lassen. Dies kann durch Hinzufügen eines neuen Speicherorts für diese Dateien erfolgen, z. wie folgt:

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)$ { } }

nginx neu laden:

service nginx reload

Sie können sogar einen Expires-HTTP-Header für diese Dateien festlegen, damit Browser diese Dateien zwischenspeichern (weitere Informationen finden Sie unter Lassen Sie Browser statische Dateien auf nginx cachen):

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; } }

Wir können dieses Setup jetzt noch einen Schritt weiterführen, indem wir nginx so viele Anfragen bedienen lassen, wie es erfüllen kann, und nur die verbleibenden Anfragen plus PHP-Dateien an Apache weiterleiten:

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; } }

nginx neu laden:

service nginx reload

Natürlich können Sie dieses Setup noch weiter verfeinern, zum Beispiel durch die Verwendung des nginx proxy_cache (sofern Ihre Anwendung dies zulässt - Sie müssen beispielsweise sicherstellen, dass Captchas oder Warenkörbe nicht zwischengespeichert werden und dass angemeldete Benutzer immer eine frische Kopie der Seite erhalten) oder wenn Ihre Anwendung einen Ganzseiten-Cache hat - nginx könnte in einem solchen Fall direkt auf den Ganzseiten-Cache zugreifen (ein Beispiel finden Sie in diesem Tutorial:How To Speed ​​Up Drupal 7.7 With Boost And nginx (Debian Squeeze)).

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

Ubuntu
  1. So richten Sie Nginx als Reverse Proxy unter Ubuntu 20.04 ein

  2. So installieren Sie Odoo 10 auf Ubuntu 16.04 mit Apache als Reverse-Proxy

  3. So installieren Sie Odoo 11 auf Ubuntu 16.04 mit Nginx als Reverse Proxy

  4. So installieren Sie Odoo 10 auf Ubuntu 16.04 mit Nginx als Reverse Proxy

  5. So installieren Sie Odoo 12 auf Ubuntu 18.04 mit Nginx als Reverse Proxy

So richten Sie Nginx als Reverse Proxy für Apache unter Debian 11 ein

So installieren Sie Rocket.chat mit nginx-Reverse-Proxy unter Ubuntu 20.04

So richten Sie Nginx als Reverse Proxy für Apache unter Debian 11 ein

So installieren Sie Nginx unter Ubuntu 15.04

So richten Sie Nginx als Reverse Proxy für Apache auf Ubuntu 18.04 VPS ein

So installieren Sie NGINX als Reverse Proxy für Apache unter Ubuntu 18.04