Я хочу разместить несколько веб-сайтов на одном сервере с обратным прокси-сервером nginx, следуя этому руководству.
https://www.datanovia.com/en/lessons/how-host-multiple-https-websites-on-one-server/
Прокси Nginx и каждый сайт запускаются отдельно с помощью Docker.
Но каждый раз, когда я перезагружаю один из веб-сайтов, он загружает содержимое другого веб-сайта. Например:
Загрузите веб-сайтone.tk в первый раз, загрузив содержимое веб-сайта ONE.
Обновите веб-сайтone.tk, загрузив содержимое веб-сайта TWO
Обновите веб-сайтone.tk еще раз, загрузив содержимое веб-сайта THREE.
Загрузите веб-сайтtwo.tk в первый раз, загрузите веб-сайт ДВА контента
Обновите веб-сайтtwo.tk , загруженный контент веб-сайта THREE.
Я новичок как в nginx, так и в докере. Я не могу сказать, возникает ли проблема в nginx или в докере.Может ли кто-нибудь посоветовать? Большое тебе спасибо.
nginx-proxy default.conf это
карта $http_x_forwarded_proto $proxy_x_forwarded_proto { по умолчанию $http_x_forwarded_proto;
'' $схема;
}
карта $http_x_forwarded_port $proxy_x_forwarded_port {
по умолчанию $http_x_forwarded_port;
'' $сервер_порт;
}
карта $http_upgrade $proxy_connection {
обновление по умолчанию;
'' близко;
}
server_names_hash_bucket_size 128;
сопоставить $proxy_x_forwarded_proto $proxy_x_forwarded_ssl {
по умолчанию выключено;
https на;
}
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] '
'"$запрос" $статус $body_bytes_sent '
'"$http_referer" "$http_user_agent" '
'"$upstream_addr"';
доступ_лог выключен;
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-SHA3> ssl_prefer_server_ciphers выключен;
журнал_ошибок /dev/stderr;
# Поддержка HTTP 1.1
прокси_http_версия 1.1;
прокси_буферизация выключена;
proxy_set_header Хост $http_host;
proxy_set_header Обновить $http_upgrade;
proxy_set_header Соединение $proxy_connection;
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 $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-Исходный URI $request_uri;
# Смягчить атаку httpoxy (подробности см. в README)
proxy_set_header Прокси "";
сервер {
имя сервера _; # Это просто недопустимое значение, которое никогда не сработает на реальном имени хоста.
server_tokens отключены;
слушать 80;
access_log /var/log/nginx/access.log vhost;
вернуть 503;
}
сервер {
имя сервера _; # Это просто недопустимое значение, которое никогда не сработает на реальном имени хоста.
server_tokens отключены;
слушать 443 ssl http2;
access_log /var/log/nginx/access.log vhost;
вернуть 503;
ssl_session_cache общий: SSL: 50 м;
ssl_session_tickets выключен;
ssl_certificate /etc/nginx/certs/default.crt;
ssl_certificate_key /etc/nginx/certs/default.key;
}
# сайтone.tk
вышестоящий сайтone.tk {
## Может быть подключен к сети "nginx-proxy"
# веб-сайтonetk_my-app_1
сервер 192.168.32.8:80;
}
сервер {
имя_сервера веб-сайтone.tk;
слушать 80 ;
access_log /var/log/nginx/access.log vhost;
# Не перенаправлять HTTPS вызов Let'sEncrypt ACME
расположение ^~ /.well-known/acme-challenge/ {
auth_basic выключен;
auth_request выключен;
позволять все;
корень /usr/share/nginx/html;
try_files $uri =404;
сломать;
}
место расположения / {
вернуть 301 https://$host$request_uri;
}
}
сервер {
имя_сервера веб-сайтone.tk;
слушать 443 ssl http2 ;
access_log /var/log/nginx/access.log vhost;
ssl_session_timeout 5 м;
ssl_session_cache общий: SSL: 50 м;
ssl_session_tickets выключен;
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_stapling включен;
ssl_stapling_verify включен;
ssl_trusted_certificate /etc/nginx/certs/websiteone.tk.chain.pem;
add_header Strict-Transport-Security «max-age=31536000» всегда;
включить /etc/nginx/vhost.d/default;
место расположения / {
proxy_pass http://websiteone.tk;
}
}
# сайтtwo.tk
вышестоящий сайтtwo.tk {
## Может быть подключен к сети "nginx-proxy"
# веб-сайтtwotk_my-app_1
сервер 192.168.32.13:80;
}
сервер {
имя_сервера веб-сайтtwo.tk;
слушать 80 ;
access_log /var/log/nginx/access.log vhost;
# Не перенаправлять HTTPS вызов Let'sEncrypt ACME
расположение ^~ /.well-known/acme-challenge/ {
auth_basic выключен;
auth_request выключен;
позволять все;
корень /usr/share/nginx/html;
try_files $uri = 404;
сломать;
}
место расположения / {
вернуть 301 https://$host$request_uri;
}
}
сервер {
имя_сервера веб-сайтtwo.tk;
слушать 443 ssl http2 ;
access_log /var/log/nginx/access.log vhost;
ssl_session_timeout 5 м;
ssl_session_cache общий: SSL: 50 м;
ssl_session_tickets выключен;
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_stapling включен;
ssl_stapling_verify включен;
ssl_trusted_certificate /etc/nginx/certs/websitetwo.tk.chain.pem;
add_header Strict-Transport-Security "max-age=31536000" всегда;
включить /etc/nginx/vhost.d/default;
место расположения / {
proxy_pass http://websitetwo.tk;
}
}
# сайтthree.tk
вышестоящий веб-сайтthree.tk {
## Может быть подключен к сети "nginx-proxy"
# веб-сайтthreetk_my-app_1
сервер 192.168.32.3:80;
}
сервер {
имя_сервера Websitethree.tk;
слушать 80 ;
access_log /var/log/nginx/access.log vhost;
# Не перенаправлять HTTPS вызов Let'sEncrypt ACME
расположение ^~ /.well-known/acme-challenge/ {
auth_basic выключен;
auth_request выключен;
позволять все;
корень /usr/share/nginx/html;
try_files $uri =404;
сломать;
}
место расположения / {
вернуть 301 https://$host$request_uri;
}
}
сервер {
имя_сервера веб-сайтthree.tk;
слушать 443 ssl http2 ;
access_log /var/log/nginx/access.log vhost;
ssl_session_timeout 5 м;
ssl_session_cache общий: SSL: 50 м;
ssl_session_tickets выключен;
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_stapling включен;
ssl_stapling_verify включен;
ssl_trusted_certificate /etc/nginx/certs/websitethree.tk.chain.pem;
add_header Strict-Transport-Security «max-age=31536000» всегда;
включить /etc/nginx/vhost.d/default;
место расположения / {
proxy_pass http://websitethree.tk;
}
}
Docker-compose для прокси-сервера nginx:
версия: '3.6'
Сервисы:
нгинкс:
изображение: nginx
этикетки:
com.github.jrcs.letsencrypt_nginx_proxy_companion.nginx_proxy: «истина»
имя_контейнера: nginx
перезапуск: если не остановлен
порты:
- "80:80"
- "443:443"
тома:
- ./conf.d:/etc/nginx/conf.d
- ./vhost.d:/etc/nginx/vhost.d
- ./html:/usr/доля/nginx/html
- ./сертификаты:/etc/nginx/сертификаты:ro
nginx-ген:
образ: jwilder/docker-gen
команда: -notify-sighup nginx -watch -wait 5s:30s /etc/docker-gen/templates/nginx.tmpl /etc/nginx/conf.d/default.conf
имя_контейнера: nginx-gen
перезапуск: если не остановлен
тома:
- ./conf.d:/etc/nginx/conf.d
- ./vhost.d:/etc/nginx/vhost.d
- ./html:/usr/доля/nginx/html
- ./сертификаты:/etc/nginx/сертификаты:ro
- /var/run/docker.sock:/tmp/docker.sock:ro
- ./nginx.tmpl:/etc/docker-gen/templates/nginx.tmpl:ro
nginx-letsencrypt:
изображение: jrcs/letsencrypt-nginx-proxy-companion
имя_контейнера: nginx-letsencrypt
перезапуск: если не остановлен
тома:
- ./conf.d:/etc/nginx/conf.d
- ./vhost.d:/etc/nginx/vhost.d
- ./html:/usr/доля/nginx/html
- ./сертификаты:/etc/nginx/сертификаты:RW
- /var/run/docker.sock:/var/run/docker.sock:ro
среда:
NGINX_DOCKER_GEN_CONTAINER: «nginx-ген»
NGINX_PROXY_CONTAINER: "nginx"
сети:
По умолчанию:
внешний:
имя: nginx-прокси
nginx default.conf для одного из веб-сайтов:
сервер {
корень /приложение2;
индекс index.php;
расположение ~ \.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 32 КБ;
включить fastcgi_params;
}
}
Docker-compose/yml для одного из веб-сайтов приведен ниже.
Рабочий каталог веб-сайта — /application1.
Рабочий каталог Websitetwo — /application2. и т.д
версия: «3.1»
Сервисы:
мое приложение:
изображение: 'nginx: альпийский'
тома:
- '.:/application2'
- './phpdocker/nginx/nginx.conf:/etc/nginx/conf.d/default.conf'
перезапуск: всегда
среда:
- VIRTUAL_HOST=websitetwo.tk
- ВИРТУАЛЬНЫЙ_ПОРТ=80
- LETSENCRYPT_HOST=websitetwo.tk
разоблачать:
- 80
почтальон:
изображение: 'mailhog/mailhog:последний'
порты:
- '21001:8025'
php-fpm:
сборка: phpdocker/php-fpm
рабочий_каталог: /application2
тома:
- '.:/application2'
- './phpdocker/php-fpm/php-ini-overrides.ini:/etc/php/8.1/fpm/conf.d/99-overrides.ini'
сети:
По умолчанию:
внешний:
имя: nginx-прокси