nginx - https代理到localhost后的nginx超时

标签 nginx docker proxy

我想用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.comhttps://domain_name.comhttp://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:8888https://www.domain_name.com:4433时,您将获得内容。当您从运行docker的服务器上 curl 到localhost:8888https://localhost:4433时,您也会获得内容。

现在是我的问题。

当我进入浏览器并键入domain_name.comwww.domain_name.comhttps://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/

相关文章:

nginx - 非 www 到 www 使用 AWS Elastic Load balancer 和 Nginx

nginx - 子域是通过域名注册商还是网络服务器创建的?

PHP FPM 终止 Cloud Run 中的每个请求

nginx - 我可以将 Nginx 作为代理放在其他代理池之前吗?

c++ - 在 Qt 5.2.1 上编写的 SSL 服务器的 SSL 握手失败

html - 在 Ubuntu 上通过 NGINX 加载 html 页面时出现 500 内部服务器错误

php - Nginx PHP 因大文件上传(超过 6 GB)而失败

python - Dockerfile:安装软件包以运行python3脚本

node.js - 使用主管在 docker 中运行 Node 和 nginx

php - 我可以从 HTTP 客户端获取 TLS secret 来解密我自己的 HTTPS 对话吗?