Nginx 与 docker:反向代理不起作用

Posted

技术标签:

【中文标题】Nginx 与 docker:反向代理不起作用【英文标题】:Nginx with docker: Reverse Proxy doesn't work 【发布时间】:2020-06-23 16:47:00 【问题描述】:

我最近想设置一个反向代理服务器。我拉了一个 nginx docker 映像,并使用以下命令运行了 docker 容器:

docker run -d --name ngtest -p 4080:80 nginx

然后我更新了 /etc/nginx/nginx.conf 如下:

user  nginx;
worker_processes  1;

error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;


events 
    worker_connections  1024;



http 
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    keepalive_timeout  65;

    #gzip  on;

    include /etc/nginx/conf.d/*.conf;

    server
        listen 80;
        location /nexus/ 
            proxy_pass    http://192.168.0.30:8081/;
        
    

当我尝试打开页面时,容器在重新启动后工作 http://192.168.0.30:4080,我得到了默认的 Nginx 页面。

但是,当我尝试这个 url:http://192.168.0.30:4080/nexus 时,我得到了一个 404 页面错误。

从日志看,nginx没有将url转发到我在nginx.conf中设置的页面,而是尝试在本地目录中查找页面:

2020/03/11 16:10:34 [error] 6#6: *251 open() "/usr/share/nginx/html/nexus" failed (2: No such file or directory), client: 192.168.0.153, server: localhost, request: "GET /nexus HTTP/1.1", host: "192.168.0.30:4080"
192.168.0.153 - - [11/Mar/2020:16:10:34 +0000] "GET /nexus HTTP/1.1" 404 555 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36" "-"

我的步骤有什么问题吗?

谢谢,

亚历克斯

【问题讨论】:

【参考方案1】:

问题是即使你更新了配置,你仍然在做:

包括/etc/nginx/conf.d/*.conf;

加载/etc/nginx/conf.d/default.conf,这将是默认服务器,如果没有提供服务器名称,则根据在未找到服务器名称时确定要使用的服务器的规则。

你应该这样做:

将您的服务器定义保存到配置文件:

server
    listen 80;
    location /nexus/ 
        proxy_pass    http://192.168.0.30:8081/;
    

然后运行

docker run -d -p 4080:80 -v (path_to_your_config):/etc/nginx/conf.d/default.conf nginx

这会将默认配置替换为您的配置。然后,如果您需要进行更改,只需进行更改并重新启动容器即可。

【讨论】:

以上是关于Nginx 与 docker:反向代理不起作用的主要内容,如果未能解决你的问题,请参考以下文章

nextcloud 的 Nginx 反向代理不起作用

Next js 和 google 分析在 nginx 反向代理后面不起作用

带有tomcat的nginx反向代理不起作用

nginx反向代理302自定义处理程序不起作用

带有反向代理 Nginx 服务器和 nodejs 的 CORS 将不起作用

nginx 的 http_sub_module / sub_filter 和反向代理不起作用