我想用Nginx运行一个docker-compose,这只是其他docker-compose服务的代理。
这是我的带代理的docker-compose.yml:
version: '2'
services:
storage:
image: nginx:1.11.13
entrypoint: /bin/true
volumes:
- ./config/nginx/conf.d:/etc/nginx/conf.d
- /path_to_ssl_cert:/path_to_ssl_cert
proxy:
image: nginx:1.11.13
ports:
- "80:80"
- "443:443"
volumes_from:
- storage
network_mode: "host"
因此,它将捕获到端口80或443的所有连接,并将它们代理到
./config/nginx/conf.d
目录中指定的服务。这是示例服务
./config/nginx/conf.d/domain_name.conf
:server {
listen 80;
listen 443 ssl;
server_name domain_name.com;
ssl_certificate /path_to_ssl_cert/cert;
ssl_certificate_key /path_to_ssl_cert/privkey;
return 301 https://www.domain_name.com$request_uri;
}
server {
listen 80;
server_name www.domain_name.com;
return 301 https://www.domain_name.com$request_uri;
# If you uncomment this section and comment return line it's works
# location ~ {
# proxy_pass http://localhost:8888;
# # or proxy to https, doesn't matter
# #proxy_pass https://localhost:4433;
# }
}
server {
listen 443 ssl;
server_name www.domain_name.com;
ssl on;
ssl_certificate /path_to_ssl_cert/cert;
ssl_certificate_key /path_to_ssl_cert/privkey;
location ~ {
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-Client-Verify SUCCESS;
proxy_set_header X-Client-DN $ssl_client_s_dn;
proxy_set_header X-SSL-Subject $ssl_client_s_dn;
proxy_set_header X-SSL-Issuer $ssl_client_i_dn;
proxy_pass https://localhost:4433;
# like before
# proxy_pass http://localhost:8888;
}
}
它将所有请求
http://domain_name.com
,https://domain_name.com
和http://www.domain_name.com
重定向到https://www.domain_name.com
并将其代理到特定的本地主机服务。这是我的特定服务docker-compose.yml
version: '2'
services:
storage:
image: nginx:1.11.13
entrypoint: /bin/true
volumes:
- /path_to_ssl_cert:/path_to_ssl_cert
- ./config/nginx/conf.d:/etc/nginx/conf.d
- ./config/php:/usr/local/etc/php
- ./config/php-fpm.d:/usr/local/etc/php-fpm.d
- php-socket:/var/share/php-socket
www:
build:
context: .
dockerfile: ./Dockerfile_www
image: domain_name_www
ports:
- "8888:80"
- "4433:443"
volumes_from:
- storage
links:
- php
php:
build:
context: .
dockerfile: ./Dockerfile_php
image: domain_name_php
volumes_from:
- storage
volumes:
php-socket:
因此,当您转到
http://www.domain_name.com:8888
或https://www.domain_name.com:4433
时,您将获得内容。当您从运行docker的服务器上 curl 到localhost:8888
或https://localhost:4433
时,您也会获得内容。现在是我的问题。
当我进入浏览器并键入
domain_name.com
,www.domain_name.com
或https://www.domain_name.com
时,什么都没有发生。即使当我从本地计算机 curl 到该域时,我也会超时。我已经搜索了一些信息“将nginx代理https传送到localhost”,但对我来说有效。
最佳答案
我有解决办法!
当我在network_mode: "host"
中为代理设置docker-compose.yml
时,我认为ports:
条目仍然有效,但无效。
现在,代理可以在我的主机网络中工作,因此它使用本地端口并从ports:
中省略docker-compose.yml
条目。这意味着我在服务器上手动打开了端口80和443。
关于nginx - https代理到localhost后的nginx超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43586162/