ฉันต้องการโฮสต์หลาย ๆ เว็บไซต์ในเซิร์ฟเวอร์เดียวด้วย nginx reverse proxy โดยทำตามบทช่วยสอนนี้
https://www.datanovia.com/th/lessons/how-host-multiple-https-websites-on-one-server/
พร็อกซี Nginx และแต่ละเว็บไซต์เปิดตัวแยกกันด้วย Docker
แต่ทุกครั้งที่ฉันรีโหลดเว็บไซต์ใดเว็บไซต์หนึ่ง มันจะโหลดเนื้อหาของเว็บไซต์อื่น ตัวอย่างเช่น:
โหลด websiteone.tk ครั้งที่ 1 โหลดเนื้อหาของเว็บ ONE
รีเฟรช websiteone.tk โหลดเนื้อหาของเว็บไซต์ TWO
รีเฟรช websiteone.tk อีกครั้ง โหลดเนื้อหาของเว็บไซต์ THREE
โหลดเว็บไซต์ two.tk ครั้งที่ 1 โหลดเนื้อหาเว็บไซต์ TWO
รีเฟรช websitetwo.tk โหลดเว็บไซต์สามเนื้อหา
ฉันเป็นผู้เริ่มต้นสำหรับทั้ง nginx และนักเทียบท่า ฉันไม่สามารถบอกได้ว่าปัญหาเกิดขึ้นใน nginx หรือ dockerใครก็ได้โปรดกรุณาแนะนำด้วย? ขอบคุณมาก.
nginx-proxy default.conf คือ
แผนที่ $http_x_forwarded_proto $proxy_x_forwarded_proto { ค่าเริ่มต้น $http_x_forwarded_proto;
'' $scheme;
}
แผนที่ $http_x_forwarded_port $proxy_x_forwarded_port {
เริ่มต้น $http_x_forwarded_port;
'' $server_port;
}
แผนที่ $http_upgrade $proxy_connection {
อัพเกรดเริ่มต้น;
'' ปิด;
}
server_names_hash_bucket_size 128;
แผนที่ $proxy_x_forwarded_proto $proxy_x_forwarded_ssl {
ปิดโดยปริยาย;
https บน;
}
gzip_types ข้อความ/ข้อความธรรมดา/แอปพลิเคชัน css/แอปพลิเคชัน javascript/แอปพลิเคชัน json/ข้อความ x-javascript/แอปพลิเคชัน xml/แอปพลิเคชัน xml/xml+rss t>log_format vhost '$host $remote_addr - $remote_user [$time_local]'
'"$คำขอ" $สถานะ $body_bytes_sent '
'"$http_referer" "$http_user_agent" '
'"$upstream_addr"';
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-SHA3> ปิด ssl_prefer_server_ciphers;
error_log /dev/stderr;
# รองรับ HTTP 1.1
proxy_http_version 1.1;
ปิด proxy_buffering;
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-ส่งต่อ-สำหรับ $proxy_add_x_forwarded_for;
proxy_set_header X-ส่งต่อโปรโต $proxy_x_forwarded_proto;
proxy_set_header X-ส่งต่อ-Ssl $proxy_x_forwarded_ssl;
proxy_set_header X-Forwarded-Port $proxy_x_forwarded_port;
proxy_set_header X-Original-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:50m;
ปิด ssl_session_tickets;
ssl_certificate /etc/nginx/certs/default.crt;
ssl_certificate_key /etc/nginx/certs/default.key;
}
#websiteone.tk
ต้นน้ำ websiteone.tk {
## สามารถเชื่อมต่อกับเครือข่าย "nginx-proxy"
#เว็บไซต์onetk_my-app_1
เซิร์ฟเวอร์ 192.168.32.8:80;
}
เซิร์ฟเวอร์ {
server_name websiteone.tk;
ฟัง 80 ;
access_log /var/log/nginx/access.log vhost;
# อย่า HTTPS เปลี่ยนเส้นทาง Let'sEncrypt ACME challenge
ที่ตั้ง ^~ /.well-known/acme-challenge/ {
ปิด auth_basic;
ปิด auth_request;
อนุญาตทั้งหมด
รูท /usr/share/nginx/html;
try_files $uri =404;
หยุดพัก;
}
ที่ตั้ง / {
ส่งคืน 301 https://$host$request_uri;
}
}
เซิร์ฟเวอร์ {
server_name websiteone.tk;
ฟัง 443 ssl http2 ;
access_log /var/log/nginx/access.log vhost;
ssl_session_timeout 5 นาที;
ssl_session_cache ที่ใช้ร่วมกัน: SSL:50m;
ปิด 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 เข้มงวดการขนส่งความปลอดภัย "อายุสูงสุด = 31536000" เสมอ;
รวม /etc/nginx/vhost.d/default;
ที่ตั้ง / {
proxy_pass http://websiteone.tk;
}
}
#websitetwo.tk
เว็บไซต์อัพสตรีม two.tk {
## สามารถเชื่อมต่อกับเครือข่าย "nginx-proxy"
#เว็บไซต์twotk_my-app_1
เซิร์ฟเวอร์ 192.168.32.13:80;
}
เซิร์ฟเวอร์ {
server_name เว็บไซต์ two.tk;
ฟัง 80 ;
access_log /var/log/nginx/access.log vhost;
# อย่า HTTPS เปลี่ยนเส้นทาง Let'sEncrypt ACME challenge
ที่ตั้ง ^~ /.well-known/acme-challenge/ {
ปิด auth_basic;
ปิด auth_request;
อนุญาตทั้งหมด
รูท /usr/share/nginx/html;
try_files $uri =404;
หยุดพัก;
}
ที่ตั้ง / {
ส่งคืน 301 https://$host$request_uri;
}
}
เซิร์ฟเวอร์ {
server_name เว็บไซต์ two.tk;
ฟัง 443 ssl http2 ;
access_log /var/log/nginx/access.log vhost;
ssl_session_timeout 5 นาที;
ssl_session_cache ที่ใช้ร่วมกัน: SSL:50m;
ปิด 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 เข้มงวดการขนส่งความปลอดภัย "อายุสูงสุด = 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;
}
เซิร์ฟเวอร์ {
เว็บไซต์ server_namethree.tk;
ฟัง 80 ;
access_log /var/log/nginx/access.log vhost;
# อย่า HTTPS เปลี่ยนเส้นทาง Let'sEncrypt ACME challenge
ที่ตั้ง ^~ /.well-known/acme-challenge/ {
ปิด auth_basic;
ปิด auth_request;
อนุญาตทั้งหมด
รูท /usr/share/nginx/html;
try_files $uri =404;
หยุดพัก;
}
ที่ตั้ง / {
ส่งคืน 301 https://$host$request_uri;
}
}
เซิร์ฟเวอร์ {
เว็บไซต์ server_namethree.tk;
ฟัง 443 ssl http2 ;
access_log /var/log/nginx/access.log vhost;
ssl_session_timeout 5 นาที;
ssl_session_cache ที่ใช้ร่วมกัน: SSL:50m;
ปิด 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 เข้มงวดการขนส่งความปลอดภัย "อายุสูงสุด = 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/share/nginx/html
- ./certs:/etc/nginx/certs:ro
nginx-gen:
รูปภาพ: 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/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:
รูปภาพ: jrcs/letsencrypt-nginx-proxy-companion
container_name: nginx-letsencrypt
รีสตาร์ท: เว้นแต่จะหยุด
ปริมาณ:
- ./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
สิ่งแวดล้อม:
NGINX_DOCKER_GEN_CONTAINER: "nginx-gen"
NGINX_PROXY_CONTAINER: "nginx"
เครือข่าย:
ค่าเริ่มต้น:
ภายนอก:
ชื่อ: nginx-proxy
nginx default.conf สำหรับหนึ่งในเว็บไซต์คือ
เซิร์ฟเวอร์ {
รูท /application2;
ดัชนี 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 32k;
รวม fastcgi_params;
}
}
docker-compose/yml สำหรับหนึ่งในเว็บไซต์อยู่ด้านล่าง
ไดเร็กทอรีการทำงานของเว็บไซต์หนึ่งคือ /application1
ไดเร็กทอรีการทำงานสองเว็บไซต์คือ /application2 เป็นต้น
รุ่น: '3.1'
บริการ:
แอปของฉัน:
ภาพ: 'nginx:อัลไพน์'
ปริมาณ:
- '.:/application2'
- './phpdocker/nginx/nginx.conf:/etc/nginx/conf.d/default.conf'
รีสตาร์ท: เสมอ
สิ่งแวดล้อม:
- VIRTUAL_HOST=websitetwo.tk
- VIRTUAL_PORT=80
- LETSENCRYPT_HOST=websitetwo.tk
เปิดเผย:
- 80
เมลฮ็อก:
ภาพ: 'mailhog/mailhog:ล่าสุด'
พอร์ต:
- '21001:8025'
php-fpm:
สร้าง: phpdocker/php-fpm
working_dir: /application2
ปริมาณ:
- '.:/application2'
- './phpdocker/php-fpm/php-ini-overrides.ini:/etc/php/8.1/fpm/conf.d/99-overrides.ini'
เครือข่าย:
ค่าเริ่มต้น:
ภายนอก:
ชื่อ: nginx-proxy