我正在尝试使用nginx反向代理作为服务之一启动docker-compose.yml。代理应该将端口80上的请求转发到数据库容器:8080。
我尝试使用 localhost:8080 和 0.0.0.0:8080 作为proxy_pass值,但没有成功。容器在同一网络中运行。
最后,在我最后一次编写之后,我检查了数据库的容器IP地址,然后将该地址插入到nginx的proxy_pass中,如下所示:
http {
server {
listen 80;
location / {
proxy_pass http://192.168.48.2:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Host $server_name;
}
}
}
然后在nginx容器中执行:nginx -s reload
可悲的是,我仍然得到一个 *502坏网关 * 当我访问localhost:80。localhost:8080将我带到WordPress设置页面。
很高兴知道这里发生了什么!
这里有完整的文档:docker-compose.yml,nginx容器的Dockerfile和我的原始nginx.conf
docker-compose.yml
version: "3"
services:
reverse_proxy:
container_name: reverse_proxy
build: ./reverseproxy
restart: always
ports:
- 80:80
db:
container_name: database
image: mysql:5.7
volumes:
- db_data:/var/lib/mysql
environment:
MYSQL_ROOT_PASSWORD: cool-password
MYSQL_DATABASE: wordpress
MYSQL_USER: user
MYSQL_PASSWORD: user-wordpress
wordpress:
container_name: wordpress
depends_on:
- db
image: wordpress:latest
ports:
- "8080:80"
environment:
WORDPRESS_DB_HOST: db
WORDPRESS_DB_USER: user
WORDPRESS_DB_PASSWORD: user-wordpress
WORDPRESS_DB_NAME: wordpress
volumes:
db_data:
networks:
default:
name: revprox
Dockerfile
FROM nginx:mainline-alpine
RUN rm /etc/nginx/conf.d/default.conf
RUN rm /etc/nginx/nginx.conf
COPY nginx.conf /etc/nginx/nginx.conf
VOLUME ["something/docker/wordpress-reverse-proxy/reverseproxy/logs", "/var/log/nginx"]
# RUN nginx -c /etc/nginx/nginx.conf
# RUN nginx -s reload
# CMD ["nginx", "-s", "reload"]
nginx.conf
worker_processes 1;
events { worker_connections 1024; }
http {
server {
listen 80;
location / {
proxy_pass http://0.0.0.0:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Host $server_name;
}
}
}
1条答案
按热度按时间2q5ifsrm1#
解决方案是添加destination-container-name:port作为proxy_pass值。所以在这个例子中
http://wordpress:80;
此外,我需要通过一个私人标签打开网站,因为浏览器保存的信息,并没有正确刷新。