ฉันจะพร็อกซีเว็บไซต์จาก Docker ผ่าน Nginx โดยไม่ทำหน้าที่เป็น localhost ได้อย่างไร
การตั้งค่าปัจจุบันของฉันประกอบด้วยโฮสต์ Ubuntu ที่มีคอนเทนเนอร์ Docker สองสามตัวพร้อมพอร์ตที่เปิดเผยคอนเทนเนอร์ Docker จะถูกเปิดเผยในเครื่องเท่านั้น การเปิดเผยบนอินเทอร์เน็ตประกอบด้วยเซิร์ฟเวอร์ Nginx ที่พร็อกซีคอนเทนเนอร์ Docker ไปยังโดเมนย่อยบางโดเมน
ในคอนเทนเนอร์ Docker ฉันเรียกใช้ Wordpress ฉันดึงมันมาจาก ฮับนักเทียบท่า ใช้ไฟล์ YML นี้:
รุ่น: '3.1'
บริการ:
เวิร์ดเพรส:
container_name: myapp-cms
ภาพ:เวิร์ดเพรส
รีสตาร์ท: เสมอ
พอร์ต:
- 8087:80
สิ่งแวดล้อม:
WORDPRESS_DB_HOST: ฐานข้อมูล
WORDPRESS_DB_USER: ตัวอย่างผู้ใช้
WORDPRESS_DB_PASSWORD: รหัสผ่านตัวอย่าง
WORDPRESS_DB_NAME: ตัวอย่างb
ปริมาณ:
- /srv/wordpress/cms:/var/www/html
ฐานข้อมูล:
container_name: myapp-db
รูป: mysql:5.7
รีสตาร์ท: เสมอ
สิ่งแวดล้อม:
MYSQL_DATABASE: exampleb
MYSQL_USER: ตัวอย่างผู้ใช้
MYSQL_PASSWORD: ตัวอย่างรหัสผ่าน
MYSQL_RANDOM_ROOT_PASSWORD: '1'
ปริมาณ:
- /srv/wordpress/db:/var/lib/mysql
คอนเทนเนอร์ Docker นี้เปิดเผยพอร์ตภายใน 8087 ซึ่งฉันใช้พร็อกซีไป mysubdomain.mydomain.com
. นี่คือไฟล์กำหนดค่า Nginx:
เซิร์ฟเวอร์ {
รูท /var/www/mysubdomain.mydomain.com;
ดัชนี index.html index.htm index.nginx-debian.html;
server_name mysubdomain.mydomain.com;
client_max_body_size 1,000M;
ที่ตั้ง / {
# try_files $uri $uri/ =404;
proxy_pass http://localhost:8087;
}
ฟัง 443 ssl; # จัดการโดย Certbot
ssl_certificate /etc/letsencrypt/live/mydomain.com-0003/fullchain.pem; # จัดการโดย Certbot
ssl_certificate_key /etc/letsencrypt/live/mydomain.com-0003/privkey.pem; # จัดการโดย Certbot
รวม /etc/letsencrypt/options-ssl-nginx.conf; # จัดการโดย Certbot
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # จัดการโดย Certbot
}
เซิร์ฟเวอร์ {
ถ้า ($host = mysubdomain.mydomain.com) {
ส่งคืน 301 https://$host$request_uri;
} # จัดการโดย Certbot
ฟัง 80;
server_name mysubdomain.mydomain.com;
กลับ 404; # จัดการโดย Certbot
}
ปัญหาคือหน้า (ในกรณีนี้คือ Wordpress) ยังคงใช้อยู่ localhost:8087
สำหรับทุกลิงค์ สิ่งนี้จะทำลายทุกความเป็นไปได้ในการคลิกที่บางสิ่ง และยังทำลายการโหลดไลบรารี CSS และ JavaScript
แก้ไข 1:
ฉันเพิ่มสองบรรทัดต่อไปนี้ใน wp-config.php
:
กำหนด ('WP_HOME','https://mysubdomain.mydomain.com');
กำหนด ('WP_SITEURL','https://mysubdomain.mydomain.com');
โหลดหน้าการตั้งค่าได้สำเร็จและปรับชื่อโดเมนด้วย ฉันสามารถติดตั้ง WordPress ได้สำเร็จ แต่ทันทีที่ฉันบันทึกการตั้งค่า (ชื่อผู้ใช้ รหัสผ่าน อีเมล) เบราว์เซอร์ก็โหลดหน้าว่างขึ้นมา โทร curl -X รับ https://mysubdomain.mydomain.com
ส่งคืนการตอบกลับที่ว่างเปล่า