用于docker容器内express服务器的nginx反向代理

用于docker容器内express服务器的nginx反向代理,express,docker,nginx,Express,Docker,Nginx,我无法代理\u将请求传递到docker容器内的express服务器。 以下是我的设置: docker容器内的Express服务器。我在express服务器上设置了两条路由,分别为“/”和“/accounts”。docker文件与nodejs官方网站提供的文件相同 docker使用以下命令运行: docker run-p 7777:8000-d myImage Nginx配置到代理服务器,并传递到端口7777。我还在nginx中安装了let encrypt 问题是,当我curl localhost

我无法代理\u将请求传递到docker容器内的express服务器。
以下是我的设置:

  • docker容器内的Express服务器。我在express服务器上设置了两条路由,分别为“/”和“/accounts”。docker文件与nodejs官方网站提供的文件相同
    docker使用以下命令运行:
    docker run-p 7777:8000-d myImage

  • Nginx配置到代理服务器,并传递到端口7777。我还在nginx中安装了let encrypt
    问题是,当我curl localhost:7777或curl localhost:7777/accounts时,它将正确响应请求。但当我试图使用我在nginx中设置的域(example.com)请求时,它只会响应example.com请求。
    在example.com/accounts中,它将返回“404notfound”

  • 编辑: nginx配置(从awnser,删除注释,重新排序)


    您可以共享您的nginx配置吗?`位置/{首先尝试将请求作为文件,然后作为目录,然后返回显示404.proxy_重定向关闭;proxy_pass;proxy_set_header Host$Host;#proxy_redirect http://https://#proxy_set_header X-Real-IP$remote_addr;#proxy_set_header X-For等待$proxy\u添加\u x\u转发\u;尝试\u文件$uri$uri/=404;}`您的express服务器与nginx在同一个容器中吗?我注意到proxy_pass;,它试图访问nginx上的本地主机而不是proxy_pass;。如果是,那么您可以尝试使用上游,然后在那里使用proxy_pass。我的nginx在主机上。express在docker容器中。我公开docker端口8000并将其绑定到主机端口7777.在主机上,当我调用localhost:7777时,它工作并从docker中的express服务器返回响应
    server {
        server_name example.com www.example.com;
        listen [::]:443 ssl ipv6only=on; # managed by Certbot
        listen 443 ssl; # managed by Certbot
        ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; # managed by Certbot
        ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem; # managed by Certbot
        include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
        ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
    
        location /{
            proxy_redirect off;
            proxy_pass http://127.0.0.1:7777;
            proxy_set_header Host $host;
            try_files $uri $uri/ =404;
        }
    }
    
    server {
        listen 80 default_server;
            listen [::]:80 default_server;
    
            server_name www.example.com example.com;
        return 404; # managed by Certbot
    
        if ($host = example.com) {
            return 301 https://$host$request_uri;
        } # managed by Certbot
    
        if ($host = example.com) {
            return 301 https://$host$request_uri;
        } # managed by Certbot
    }