ela*_*pog 5 nginx routing reverse-proxy docker docker-compose
我正在尝试创建一个基于 docker 的多容器设置,其中包含多个域的反向代理以提供服务,其中网站、数据库和基于 nginx 的反向代理在容器中运行,但我不知道我在做什么丢失(我是 nginx 新手)。
\n\n细节:
\n\nmy_example_domain_1.com
,my_example_domain_2.net
我的例子: (basedir multi-container
:)
nginx_revproxy/default.conf:
\n\nserver {\n listen 80;\n server_name localhost;\n\n location / {\n root /usr/share/nginx/html;\n index index.html index.htm;\n }\n\n error_page 500 502 503 504 /50x.html;\n location = /50x.html {\n root /usr/share/nginx/html;\n }\n}\n\nserver {\n listen 80;\n server_name my_example_domain_1.com;\n location / {\n proxy_pass http://wp1:80;\n }\n}\n\nserver {\n listen 80;\n server_name my_example_domain_2.net;\n location / {\n proxy_pass http://wp2:80;\n }\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n./nginx_revproxy/Dockerfile:
\n\nFROM nginx:stable-alpine\nCOPY default.conf /etc/nginx/conf.d\nEXPOSE 80/tcp\nEXPOSE 443/tcp\nCMD ["/bin/sh", "-c", "exec nginx -g \'daemon off;\';"]\nWORKDIR /usr/share/nginx/html\n
Run Code Online (Sandbox Code Playgroud)\n\n./docker-compose.yml
\n\nversion: \'3.7\'\n\nservices:\n\n revproxy:\n container_name: revproxy\n build: nginx_revproxy\n restart: always\n networks:\n - mynet\n\n db1:\n container_name: db1\n image: mysql:5.7\n volumes:\n - "${PWD}/data_mysql1:/var/lib/mysql"\n - "/tmp/db_site1:/tmp"\n restart: always\n environment:\n MYSQL_ROOT_PASSWORD: somewordpress\n MYSQL_DATABASE: wordpress\n MYSQL_USER: wordpress\n MYSQL_PASSWORD: wordpress\n networks:\n - mynet\n\n db2:\n container_name: db2\n image: mysql:5.7\n volumes:\n - "${PWD}/data_mysql2:/var/lib/mysql"\n - "/tmp/db_site2:/tmp"\n restart: always\n environment:\n MYSQL_ROOT_PASSWORD: somewordpress\n MYSQL_DATABASE: wordpress\n MYSQL_USER: wordpress\n MYSQL_PASSWORD: wordpress\n networks:\n - mynet\n\n wp1:\n container_name: wp1\n depends_on:\n - db1\n - revproxy\n image: wordpress:latest\n ports:\n - "8081:80"\n restart: always\n environment:\n WORDPRESS_DB_HOST: db1:3306\n WORDPRESS_DB_USER: wordpress\n WORDPRESS_DB_PASSWORD: wordpress\n WORDPRESS_DB_NAME: wordpress\n volumes:\n - "${PWD}/data_wordpress1:/var/www/html"\n - "/tmp/wp_site1:/tmp"\n networks:\n - mynet\n\n wp2:\n container_name: wp2\n depends_on:\n - db2\n - revproxy\n image: wordpress:latest\n ports:\n - "8082:80"\n restart: always\n environment:\n WORDPRESS_DB_HOST: db2:3306\n WORDPRESS_DB_USER: wordpress\n WORDPRESS_DB_PASSWORD: wordpress\n WORDPRESS_DB_NAME: wordpress\n volumes:\n - "${PWD}/data_wordpress2:/var/www/html"\n - "/tmp/wp_site2:/tmp"\n networks:\n - mynet\n\nvolumes:\n data_mysql1:\n data_mysql2:\n data_wordpress1:\n data_wordpress2:\n\nnetworks:\n mynet:\n
Run Code Online (Sandbox Code Playgroud)\n\n旁注:
\n\nrevproxy
测试:如果我从文件中取出docker-compose.yml
并在桌面计算机上执行docker-compose up -d
,我可以在容器端口上访问两个网站(没有 revproxy)localhost:8081
:,localhost:8082
docker-compose up -d
在服务器上执行时,无法访问网站$ docker ps -a\nCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES\n974fa178b964 wordpress:latest "docker-entrypoint.s\xe2\x80\xa6" 45 seconds ago Up 41 seconds 0.0.0.0:8081->80/tcp wp1\nbdace64331b7 wordpress:latest "docker-entrypoint.s\xe2\x80\xa6" 45 seconds ago Up 41 seconds 0.0.0.0:8082->80/tcp wp2\n9877a41d4bfa multi-container-2_revproxy "/bin/sh -c \'exec ng\xe2\x80\xa6" 47 seconds ago Up 41 seconds 80/tcp, 443/tcp revproxy\ne88e226499f2 mysql:5.7 "docker-entrypoint.s\xe2\x80\xa6" 47 seconds ago Up 44 seconds 3306/tcp, 33060/tcp db2\n9feaec1b2314 mysql:5.7 "docker-entrypoint.s\xe2\x80\xa6" 47 seconds ago Up 44 seconds 3306/tcp, 33060/tcp db1\n
Run Code Online (Sandbox Code Playgroud)\n\n$ docker logs -f revproxy\n2020/04/09 08:34:21 [emerg] 1#1: host not found in upstream "wp1" in /etc/nginx/conf.d/default.conf:20\nnginx: [emerg] host not found in upstream "wp1" in /etc/nginx/conf.d/default.conf:20\n
Run Code Online (Sandbox Code Playgroud)\n\n$ docker inspect multi-container_mynet\ndocker inspect multi-container_mynet\n[\n {\n "Name": "multi-container_mynet",\n "Id": "24e1dd604427db695709056290b9c86021674916d57133b24e33fe765cd26165",\n "Created": "2020-04-09T10:44:59.568919008+02:00",\n "Scope": "local",\n "Driver": "bridge",\n "EnableIPv6": false,\n "IPAM": {\n "Driver": "default",\n "Options": null,\n "Config": [\n {\n "Subnet": "172.31.0.0/16",\n "Gateway": "172.31.0.1"\n }\n ]\n },\n "Internal": false,\n "Attachable": true,\n "Ingress": false,\n "ConfigFrom": {\n "Network": ""\n },\n "ConfigOnly": false,\n "Containers": {\n "18d60a010dafca22dd03c2f60cf1b2a607f7ac19ea00e88cd6baff6ada392545": {\n "Name": "revproxy",\n "EndpointID": "14974557d1876df15e35ffacb333a4d15883b7645cd90fe819cc2763118c7151",\n "MacAddress": "02:42:ac:1f:00:02",\n "IPv4Address": "172.31.0.2/16",\n "IPv6Address": ""\n },\n "4b591fcb01c464d9ce932ab8e67e9409c2e19e725ab75faa5bcfd2c322ced1b8": {\n "Name": "db1",\n "EndpointID": "a3631f7943701b333b203e48d816853ef7da4739cfbd265edc6126aad9fbc832",\n "MacAddress": "02:42:ac:1f:00:04",\n "IPv4Address": "172.31.0.4/16",\n "IPv6Address": ""\n },\n "885434c047c3eb2f5794a307a51dc5057384744a5483857474e41c697d2c954d": {\n "Name": "db2",\n "EndpointID": "d1840498f59f96840f44e1b91be0a69ff00cd78e06fea736e8f22f01e7fb8a94",\n "MacAddress": "02:42:ac:1f:00:03",\n "IPv4Address": "172.31.0.3/16",\n "IPv6Address": ""\n },\n "9d90045cfe089418cb1886af89f79780f0d52f08bb876241c3d90d5fa5ab0dfd": {\n "Name": "wp1",\n "EndpointID": "2052ae635d5317e6928bb961d183c280add219b09ac042fc56a6f26c3410531e",\n "MacAddress": "02:42:ac:1f:00:06",\n "IPv4Address": "172.31.0.6/16",\n "IPv6Address": ""\n },\n "b9caf876f7f4f8bbf2d77c422f0179e647bcfd22b0129de0a83c90360df54612": {\n "Name": "wp2",\n "EndpointID": "479bbd8d29cff9644c008316c91cdecac75f3f8ef107ad59f0d2e4683cd4b81c",\n "MacAddress": "02:42:ac:1f:00:05",\n "IPv4Address": "172.31.0.5/16",\n "IPv6Address": ""\n }\n },\n "Options": {},\n "Labels": {\n "com.docker.compose.network": "mynet",\n "com.docker.compose.project": "multi-container",\n "com.docker.compose.version": "1.23.1"\n }\n }\n]\n
Run Code Online (Sandbox Code Playgroud)\n\n有人有什么主意吗?
\nela*_*pog 10
与此同时,我自己想出了办法。
这是一个有效的配置(如果有人对未来感兴趣):
nginx_revproxy/default.conf
:
upstream domain1 {
server wp1:80;
}
upstream domain2 {
server wp2:80;
}
server {
listen 80;
server_name domain1.com;
location / {
proxy_pass http://domain1/;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $remote_addr;
}
}
server {
listen 80;
server_name domain2.com;
location / {
proxy_pass http://domain2/;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $remote_addr;
}
}
Run Code Online (Sandbox Code Playgroud)
nginx_revproxy/Dockerfile
:
FROM nginx:stable-alpine
COPY default.conf /etc/nginx/conf.d
EXPOSE 80/tcp
EXPOSE 443/tcp
CMD ["/bin/sh", "-c", "exec nginx -g 'daemon off;';"]
WORKDIR /usr/share/nginx/html
Run Code Online (Sandbox Code Playgroud)
docker-compose.yml
:
version: '3.7'
services:
revproxy:
container_name: revproxy
build: nginx_revproxy
depends_on:
- wp1
- wp2
restart: always
ports:
- 80:80
networks:
- mynet
db1:
container_name: db1
image: mysql:5.7
volumes:
- "${PWD}/data_mysql1:/var/lib/mysql"
- "/tmp/db_site1:/tmp"
restart: always
environment:
MYSQL_ROOT_PASSWORD: somewordpress
MYSQL_DATABASE: wordpress
MYSQL_USER: wordpress
MYSQL_PASSWORD: wordpress
networks:
- mynet
db2:
container_name: db2
image: mysql:5.7
volumes:
- "${PWD}/data_mysql2:/var/lib/mysql"
- "/tmp/db_site2:/tmp"
restart: always
environment:
MYSQL_ROOT_PASSWORD: somewordpress
MYSQL_DATABASE: wordpress
MYSQL_USER: wordpress
MYSQL_PASSWORD: wordpress
networks:
- mynet
wp1:
container_name: wp1
depends_on:
- db1
image: wordpress:latest
ports:
- "8081:80"
restart: always
environment:
WORDPRESS_DB_HOST: db1:3306
WORDPRESS_DB_USER: wordpress
WORDPRESS_DB_PASSWORD: wordpress
WORDPRESS_DB_NAME: wordpress
volumes:
- "${PWD}/data_wordpress1:/var/www/html"
- "/tmp/wp_site1:/tmp"
networks:
- mynet
wp2:
container_name: wp2
depends_on:
- db2
image: wordpress:latest
ports:
- "8082:80"
restart: always
environment:
WORDPRESS_DB_HOST: db2:3306
WORDPRESS_DB_USER: wordpress
WORDPRESS_DB_PASSWORD: wordpress
WORDPRESS_DB_NAME: wordpress
volumes:
- "${PWD}/data_wordpress2:/var/www/html"
- "/tmp/wp_site2:/tmp"
networks:
- mynet
volumes:
data_mysql1:
data_mysql2:
data_wordpress1:
data_wordpress2:
networks:
mynet:
Run Code Online (Sandbox Code Playgroud)
谢谢你的帮助!
归档时间: |
|
查看次数: |
24253 次 |
最近记录: |