docker中nginx转发失败

在nginx配置文件中配置如下

user  nginx;
worker_processes  auto;

error_log  /var/log/nginx/error.log notice;
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       8083;
        server_name  106.55.9.3; #此处设置的是服务器ip
 
        location / {
            root       /usr/share/nginx/html;
            index      index.html;
            try_files  $uri $uri/ /index.html;
        }
 
        location /im {
            alias      /home/poetry-vue3;
            index      index.html;
            try_files  $uri $uri/ /index.html;
        }
        location ~ /api/ {
        fastcgi_buffers 256 128k;
        chunked_transfer_encoding off; 
            rewrite           ^/api/(.*)$ /$1 break;
            proxy_pass        http://106.55.9.3:8081;
            proxy_redirect    off;
            proxy_set_header  Host $host:$server_port;
            proxy_set_header  X-real-ip $remote_addr;
            proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;
        }
        location /socket {
            proxy_pass          http://127.0.0.1:9324;
            proxy_http_version  1.1;
            proxy_set_header    Upgrade $http_upgrade;
            proxy_set_header    Connection "upgrade";
            proxy_read_timeout  600s;
        }
    }


}


这里监听了8083的端口,在nginx启动的时候也映射了宿主机的8083:8083端口,
希望能通过8083转发到8081端口做后端的请求,前端请求路径:http://106.55.9.3:8083/api/webInfo
实际后端接口路径是 8081/webInfo
发现无法转发,不知道问题出在哪里,求解答~

rewrite去掉 proxy_pass后面结尾加/api/


proxy_pass http://xxx.xxxx:8081/api/;
  • 这篇博客也许可以解决你的问题👉 :Docker部署(五):Nginx and 反向代理配置
  • 除此之外, 这篇博客: 利用Nginx和Docker搭建一个在线直播的web服务——动静分离实践中的 配置动静分离 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 我们首先看一下我们的服务里的静态文件
    在这里插入图片描述
    用nginx动静分离的概念就是,让nginx服务器运行静态文件,docker中的flask服务通过调用nginx运行的静态文件达到效果,也可以理解你自己搭建了一个cdn服务。

    1. 配置conf/agora.conf文件。
    upstream agora_server{
        server 127.0.0.1:81;
        server 127.0.0.1:82;
        server 127.0.0.1:83;
    }
    
    
    server {
        listen       80;
        #server_name  www.agora.com;
    
        location / {
            proxy_pass http://agora_server;
                         }
                         
        location ~ .*\.(js|css|ico|png|jpg|eot|svg|ttf|woff) {
            root /home/kies/www/static;
        }
    }
    

    最后一个location就是我们静态文件的地址,nginx会根据这个目录下的内容启动服务。
    此时启动会导致静态文件不能成功加载
    在这里插入图片描述
    2. 将MRoom项目中的MRoom/app/static文件复制到/home/kies/www/static下。
    3. nginx -s reload 重载配置文件
    4. 访问80端口,动静分离成功搭建!
    在这里插入图片描述
    提示
    如果遇到不能成功搭建,请查看/var/log/nginx/下的报错日志,根据日志内容进一步完善项目。

    关于agora这个开源项目 https://github.com/AgoraIO

  • 以下回答由chatgpt基于相关博客总结生成:

    针对所述问题,可能的原因有: 1. nginx配置文件有误; 2. 后端服务未正确启动或监听端口有误; 3. 防火墙等网络问题导致请求无法转发。

    针对此问题,可以采取以下步骤进行排查和解决:

    步骤1:检查nginx配置文件 首先,需要检查nginx配置文件中是否正确设置了代理相关参数。可以在nginx的配置文件中增加一个location配置段,以将请求代理到后端服务:

    location /api/ {
        proxy_pass http://backend:8081/;
        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-Proto $scheme;
    }
    

    其中,backend表示后端服务的IP地址,8081表示后端服务监听的端口号,/api/表示请求的路径。此配置中还设置了一些代理相关参数,如请求头中的Host信息、代理服务器真实IP地址等。

    步骤2:检查后端服务是否正确启动 可以针对后端服务尝试通过curl等工具进行测试,看下是否能够正确访问到后端服务。若无法访问,则需要检查后端服务的配置和监听端口是否正确。

    步骤3:检查网络设置 若nginx和后端服务运行在不同的主机上,则需要确认主机之间是否存在网络问题。可以通过ping等命令测试主机之间的连通性,确认网络是否通畅。同时还需要注意宿主机的防火墙等网络设置,如需开放端口等操作。

    综上所述,可以通过检查nginx配置文件、后端服务是否正确启动,以及网络设置等方面进行排查和解决。