Vreau să găzduiesc mai multe site-uri web într-un singur server cu reverse proxy nginx, urmând acest tutorial
https://www.datanovia.com/en/lessons/how-host-multiple-https-websites-on-one-server/
Proxy-ul Nginx și fiecare site web sunt lansate separat cu Docker.
Dar de fiecare dată când reîncarc unul dintre site-uri, acesta încarcă conținutul altui site. De exemplu:
Încărcați websiteone.tk pentru prima dată, a încărcat conținutul site-ului ONE.
Actualizează websiteone.tk , a încărcat conținutul site-ului TWO
Actualizează din nou websiteone.tk, a încărcat conținutul site-ului THREE
Încărcați websitetwo.tk prima dată, site-ul încărcat DOUA conținut
Actualizează websitetwo.tk , site-ul încărcat THREE conținut.
Sunt un începător atât pentru nginx, cât și pentru docker. Nu pot spune dacă problema se întâmplă în nginx sau docker.Poate cineva va rog frumos să sfătuiască? Mulțumesc foarte mult.
Nginx-proxy default.conf este
harta $http_x_forwarded_proto $proxy_x_forwarded_proto { implicit $http_x_forwarded_proto;
'' $schema;
}
harta $http_x_forwarded_port $proxy_x_forwarded_port {
implicit $http_x_forwarded_port;
'' $server_port;
}
harta $http_upgrade $proxy_connection {
upgrade implicit;
'' închide;
}
server_names_hash_bucket_size 128;
harta $proxy_x_forwarded_proto $proxy_x_forwarded_ssl {
implicit dezactivat;
https activat;
}
gzip_types text/plain text/css application/javascript application/json application/x-javascript text/xml application/xml application/xml+rss t>log_format vhost „$host $remote_addr - $remote_user [$time_local] '
'"$request" $status $body_bytes_sent '
'"$http_referer" "$http_user_agent" '
'"$adresă_amonte"';
access_log off;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers 'ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA256-GCM-SHA256-prefer _sserver_SHA384_ssl_ciphers;
error_log /dev/stderr;
# Suport HTTP 1.1
proxy_http_versiunea 1.1;
proxy_buffering dezactivat;
proxy_set_header Gazdă $http_host;
proxy_set_header Actualizare $http_upgrade;
proxy_set_header Conexiune $proxy_connection;
proxy_set_header X-Real-IP $adresă_la distanță;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $proxy_x_forwarded_proto;
proxy_set_header X-Forwarded-Ssl $proxy_x_forwarded_ssl;
proxy_set_header X-Forwarded-Port $proxy_x_forwarded_port;
proxy_set_header X-Original-URI $request_uri;
# Atenuați atacul httpoxy (consultați README pentru detalii)
proxy_set_header Proxy „”;
Server {
numele serverului _; # Aceasta este doar o valoare nevalidă care nu se va declanșa niciodată pe un nume de gazdă real.
server_tokens dezactivat;
asculta 80;
access_log /var/log/nginx/access.log vhost;
întoarce 503;
}
Server {
numele serverului _; # Aceasta este doar o valoare nevalidă care nu se va declanșa niciodată pe un nume de gazdă real.
server_tokens dezactivat;
asculta 443 ssl http2;
access_log /var/log/nginx/access.log vhost;
întoarce 503;
ssl_session_cache shared:SSL:50m;
ssl_session_tickets off;
ssl_certificate /etc/nginx/certs/default.crt;
ssl_certificate_key /etc/nginx/certs/default.key;
}
# websiteone.tk
amonte websiteone.tk {
## Poate fi conectat la rețeaua „nginx-proxy”.
# websiteonetk_my-app_1
server 192.168.32.8:80;
}
Server {
nume_server websiteone.tk;
asculta 80 ;
access_log /var/log/nginx/access.log vhost;
# Nu redirecționați HTTPS provocarea Let'sEncrypt ACME
locație ^~ /.well-known/acme-challenge/ {
auth_basic off;
auth_request dezactivat;
permite tuturor;
root /usr/share/nginx/html;
try_files $uri =404;
pauză;
}
Locație / {
returnează 301 https://$host$request_uri;
}
}
Server {
nume_server websiteone.tk;
asculta 443 ssl http2 ;
access_log /var/log/nginx/access.log vhost;
ssl_session_timeout 5m;
ssl_session_cache shared:SSL:50m;
ssl_session_tickets off;
ssl_certificate /etc/nginx/certs/websiteone.tk.crt;
ssl_certificate_key /etc/nginx/certs/websiteone.tk.key;
ssl_dhparam /etc/nginx/certs/websiteone.tk.dhparam.pem;
ssl_capsare activată;
ssl_stapling_verify on;
ssl_trusted_certificate /etc/nginx/certs/websiteone.tk.chain.pem;
add_header Strict-Transport-Security "max-age=31536000" întotdeauna;
includ /etc/nginx/vhost.d/default;
Locație / {
proxy_pass http://websiteone.tk;
}
}
# websitetwo.tk
site-ul în amontetwo.tk {
## Poate fi conectat la rețeaua „nginx-proxy”.
# websitetwotk_my-app_1
server 192.168.32.13:80;
}
Server {
nume_server websitetwo.tk;
asculta 80 ;
access_log /var/log/nginx/access.log vhost;
# Nu redirecționați HTTPS provocarea Let'sEncrypt ACME
locație ^~ /.well-known/acme-challenge/ {
auth_basic off;
auth_request dezactivat;
permite tuturor;
root /usr/share/nginx/html;
try_files $uri =404;
pauză;
}
Locație / {
returnează 301 https://$host$request_uri;
}
}
Server {
nume_server websitetwo.tk;
asculta 443 ssl http2 ;
access_log /var/log/nginx/access.log vhost;
ssl_session_timeout 5m;
ssl_session_cache shared:SSL:50m;
ssl_session_tickets off;
ssl_certificate /etc/nginx/certs/websitetwo.tk.crt;
ssl_certificate_key /etc/nginx/certs/websitetwo.tk.key;
ssl_dhparam /etc/nginx/certs/websitetwo.tk.dhparam.pem;
ssl_capsare activată;
ssl_stapling_verify on;
ssl_trusted_certificate /etc/nginx/certs/websitetwo.tk.chain.pem;
add_header Strict-Transport-Security "max-age=31536000" întotdeauna;
includ /etc/nginx/vhost.d/default;
Locație / {
proxy_pass http://websitetwo.tk;
}
}
# websitethree.tk
amonte websitethree.tk {
## Poate fi conectat la rețeaua „nginx-proxy”.
# websitethreetk_my-app_1
server 192.168.32.3:80;
}
Server {
nume_server websitethree.tk;
asculta 80 ;
access_log /var/log/nginx/access.log vhost;
# Nu redirecționați HTTPS provocarea Let'sEncrypt ACME
locație ^~ /.well-known/acme-challenge/ {
auth_basic off;
auth_request dezactivat;
permite tuturor;
root /usr/share/nginx/html;
try_files $uri =404;
pauză;
}
Locație / {
returnează 301 https://$host$request_uri;
}
}
Server {
nume_server websitethree.tk;
asculta 443 ssl http2 ;
access_log /var/log/nginx/access.log vhost;
ssl_session_timeout 5m;
ssl_session_cache shared:SSL:50m;
ssl_session_tickets off;
ssl_certificate /etc/nginx/certs/websitethree.tk.crt;
ssl_certificate_key /etc/nginx/certs/websitethree.tk.key;
ssl_dhparam /etc/nginx/certs/websitethree.tk.dhparam.pem;
ssl_capsare activată;
ssl_stapling_verify on;
ssl_trusted_certificate /etc/nginx/certs/websitethree.tk.chain.pem;
add_header Strict-Transport-Security "max-age=31536000" întotdeauna;
includ /etc/nginx/vhost.d/default;
Locație / {
proxy_pass http://websitethree.tk;
}
}
Docker-compose pentru proxy-ul nginx este
versiunea: „3.6”
Servicii:
nginx:
imagine: nginx
etichete:
com.github.jrcs.letsencrypt_nginx_proxy_companion.nginx_proxy: „adevărat”
container_name: nginx
reporniți: dacă nu este oprit
porturi:
- „80:80”
- „443:443”
volume:
- ./conf.d:/etc/nginx/conf.d
- ./vhost.d:/etc/nginx/vhost.d
- ./html:/usr/share/nginx/html
- ./certs:/etc/nginx/certs:ro
nginx-gen:
imagine: jwilder/docker-gen
comandă: -notify-sighup nginx -watch -wait 5s:30s /etc/docker-gen/templates/nginx.tmpl /etc/nginx/conf.d/default.conf
container_name: nginx-gen
reporniți: dacă nu este oprit
volume:
- ./conf.d:/etc/nginx/conf.d
- ./vhost.d:/etc/nginx/vhost.d
- ./html:/usr/share/nginx/html
- ./certs:/etc/nginx/certs:ro
- /var/run/docker.sock:/tmp/docker.sock:ro
- ./nginx.tmpl:/etc/docker-gen/templates/nginx.tmpl:ro
nginx-letsencrypt:
imagine: jrcs/letsencrypt-nginx-proxy-companion
container_name: nginx-letsencrypt
reporniți: dacă nu este oprit
volume:
- ./conf.d:/etc/nginx/conf.d
- ./vhost.d:/etc/nginx/vhost.d
- ./html:/usr/share/nginx/html
- ./certs:/etc/nginx/certs:rw
- /var/run/docker.sock:/var/run/docker.sock:ro
mediu inconjurator:
NGINX_DOCKER_GEN_CONTAINER: „nginx-gen”
NGINX_PROXY_CONTAINER: „nginx”
retele:
Mod implicit:
extern:
nume: nginx-proxy
Nginx default.conf pentru unul dintre site-uri este
Server {
root /application2;
index index.php;
locație ~ \.php$ {
fastcgi_pass php-fpm:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PHP_VALUE „error_log=/var/log/nginx/application_php_errors.log”;
fastcgi_buffers 16 16k;
fastcgi_buffer_size 32k;
include fastcgi_params;
}
}
Docker-compose/yml pentru unul dintre site-uri este mai jos.
Websiteone director de lucru este /application1.
Directorul de lucru Websitetwo este /application2. etc
versiunea: „3.1”
Servicii:
aplicația mea:
imagine: „nginx:alpine”
volume:
- '.:/application2'
- „./phpdocker/nginx/nginx.conf:/etc/nginx/conf.d/default.conf”
reporniți: întotdeauna
mediu inconjurator:
- VIRTUAL_HOST=websitetwo.tk
- VIRTUAL_PORT=80
- LETSENCRYPT_HOST=websitetwo.tk
expune:
- 80
mailhog:
imagine: „mailhog/mailhog:latest”
porturi:
- „21001:8025”
php-fpm:
build: phpdocker/php-fpm
work_dir: /application2
volume:
- '.:/application2'
- „./phpdocker/php-fpm/php-ini-overrides.ini:/etc/php/8.1/fpm/conf.d/99-overrides.ini”
retele:
Mod implicit:
extern:
nume: nginx-proxy