nginx

关注公众号 jb51net

关闭
首页 > 网站技巧 > 服务器 > nginx > nginx的location配置导致网关返回404

nginx的location配置导致网关返回404问题

作者:飘零未归人

这篇文章主要介绍了nginx的location配置导致网关返回404问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

nginx的location配置导致网关返回404

再项目中使用nginx转发到网关时,发现返回了404.

{

    "timestamp": "2023-11-01T02:12:48.788+00:00",

    "path": "//core-manage-web/core/core-manage/servers/findServers",

    "status": 404,

    "error": "Not Found",

    "message": null,

    "requestId": "642b125b"

}

从这个返回来看,应该是网关返回的信息。因为如果是nginx返回404的话,应该是返回的404.html才对。

所以看看出是网关找不到转发的路径。 从  "path": "//core-manage-web/core/core-manage/servers/findServers",看出我们的接口经过nginx转发之后,居然只有两个//。正常应该只有一个才对。

再看一下location配置:

location /core {
    proxy_pass http://gateway-upstream/;
}

由于第一次使用使用nginx,所以对于这些配置还不是很了解。这上面的的  “location /core”标识路径前缀匹配。 而我的 “http://core-gateway-upstream/”是以“/”结尾,这表示会将 location的匹配路径(/core)替换掉在转发。

gateway-upstream配置如下

upstream gateway-upstream {
    server 192.168.111.1:10006;
}

所以如果我是用 http:localhost:8080/core/login/xxxxx访问,则经过nginx转发之后会变成192.168.111.1:10006//login/xxxxx

所以需要将 location /core改成 location /core/。即可:

location /core/ {
    proxy_pass http://gateway-upstream/;
}

nginx配置多个location访问报404

解决方法

在自己配置的location中不要使用root配置文件目录,替换为alias即可

完整配置

#user  nobody;
worker_processes  1;

#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#pid        logs/nginx.pid;


events {
    worker_connections  1024;
}


http {
    include       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  logs/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;

    #gzip  on;

    server {
        listen       8080;
        server_name  localhost;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
            autoindex on;             #开启索引功能
            autoindex_exact_size off; # 关闭计算文件确切大小(单位bytes),只显示大概大小(单位kb、mb、gb)
            autoindex_localtime on;   # 显示本机时间而非 GMT 时间
            charset utf-8; # 避免中文乱码
            root   file;
            #index  index.html index.htm;
        }
        
        location /file {
	    alias   html;
            index  index.html index.htm;
	}
        #error_page  404              /404.html;

        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }

        # proxy the PHP scripts to Apache listening on 127.0.0.1:80
        #
        #location ~ \.php$ {
        #    proxy_pass   http://127.0.0.1;
        #}

        # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
        #
        #location ~ \.php$ {
        #    root           html;
        #    fastcgi_pass   127.0.0.1:9000;
        #    fastcgi_index  index.php;
        #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
        #    include        fastcgi_params;
        #}

        # deny access to .htaccess files, if Apache's document root
        # concurs with nginx's one
        #
        #location ~ /\.ht {
        #    deny  all;
        #}
    }


    # another virtual host using mix of IP-, name-, and port-based configuration
    #
    #server {
    #    listen       8000;
    #    listen       somename:8080;
    #    server_name  somename  alias  another.alias;

    #    location / {
    #        root   html;
    #        index  index.html index.htm;
    #    }
    #}


    # HTTPS server
    #
    #server {
    #    listen       443 ssl;
    #    server_name  localhost;

    #    ssl_certificate      cert.pem;
    #    ssl_certificate_key  cert.key;

    #    ssl_session_cache    shared:SSL:1m;
    #    ssl_session_timeout  5m;

    #    ssl_ciphers  HIGH:!aNULL:!MD5;
    #    ssl_prefer_server_ciphers  on;

    #    location / {
    #        root   html;
    #        index  index.html index.htm;
    #    }
    #}

}

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

您可能感兴趣的文章:
阅读全文