账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    nginx 做反向代理时 localhost无法保存cookie
    26
    0

    在做vue+springboot+nginx的时候,发现使用localhost登录后无法访问接口,每次都会提示没有登录而被拒绝访问,感觉每次都是另外一台服务器在访问一样。查看请求,发现第二次请求并没有发送登录后的sessionId过去,所以判断是cookie未保存。测试发现localhost和127.0.0.1都无法保存上cookie,换成内网IP,在本地hosts文件映射一个域名到本机,或者直接使用postman访问springboot都是可以的。原因未知,大家可以讨论下。nginx配置如下:`

    worker_processes 1;

    events {

    worker_connections  1024;

    }

    http {

    include       mime.types;
    default_type  application/octet-stream;
    
    keepalive_timeout  65;
    
    gzip  on;
    
    server {
        listen       80;
        server_name  localhost;
        proxy_set_header Host $host; 
        #charset koi8-r;
    
        #access_log  logs/host.access.log  main;
        
        location  ~ .*\.(html|htm|gif|jpg|jpeg|bmp|png|ico|txt|js|css|ttf|woff)$ {
            rewrite /login.html /index.html permanent;
            root D:/Vue/bmsfront/dist;
            index index.html;
        }
        
        location = / {
            root D:/Vue/bmsfront/dist;
            index index.html;
        }
        
        location / {
            proxy_pass http://back_app;            
        }
    
    }
    
    upstream back_app {
        ip_hash;
        server localhost:8080;
        
        
    }
    
    
    # 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;
    #    }
    #}
    

    }
    `

    0
    打赏
    收藏
    点击回答
        全部回答
    • 0
    • 移动二级包 普通会员 1楼

      在Nginx中,如果你使用localhost作为反向代理服务器,但本地服务器(通常是浏览器或本地服务)无法保存cookie,可能有以下几种原因:

      1. Nginx服务器配置问题:首先,确保Nginx服务器配置正确,没有使用rewrite规则将localhost映射到某个路径,导致浏览器无法正确识别或访问本地服务器的cookie。

      2. Cookies配置问题:Nginx配置了Cookie代理或SSL插件,但是没有在请求头部设置适当的Cookie头信息。例如,你可能使用Set-Cookie头来设置Cookie,但在反向代理请求中,没有包含相应的HostReferer字段,浏览器无法识别请求来自哪个域名,从而无法保存cookie。

      3. Cookie文件不存在:如果本地服务器没有创建或保存cookie文件,那么浏览器将无法访问和保存cookie。请确保你的服务器上存在名为.htaccessnginx.conf的文件,其中包含以下内容:

      # Setcookie setcookie 'my_cookie_name', 'my_cookie_value', 1, '/', 'localhost', ';';

      这行代码设置了一个名为my_cookie_name的cookie,其值为my_cookie_value,Expires为1, Domain为localhost, Path为/, HTTPOnly为true, Secure为false,Cookie lifetime为1 hour。

      1. Browser设置问题:有些浏览器(如Chrome和Firefox)允许在设置中手动保存和加载cookie。请在浏览器设置中开启“保存和加载cookie”选项,或者在本地设置中将localhost映射到一个与.htaccess文件相同的URL。

      2. DNS解析问题:Nginx服务器需要将本地服务器的IP地址解析为对应的域名。如果本地服务器的IP地址在localhost之外,浏览器将无法从该IP地址直接访问到本地服务器,导致无法保存cookie。

      在Nginx配置中,你可以使用proxy_passproxy_set_header指令将请求转发到其他域名或服务器,但请确保这与你的本地服务器IP地址在同一域名或服务器上。

      1. Server Name Load Balancer(SLB)问题:如果你使用了Server Name Load Balancer(SLB),在反向代理中配置了SLB,但SLB在负载均衡器(如Nginx)内部失败,或者SLB的权重分配错误,将导致本地服务器无法正常访问或保存cookie。

      请检查你的Nginx配置文件,确保没有错误的SLB配置,或者确保SLB的权重分配正确,将localhost作为反向代理的服务器之一。

      1. 内容分发网络(CDN)问题:如果你使用了CDN(内容分发网络),并配置了CDN服务,可能需要在反向代理服务器上启用CDN,以确保从CDN获取的响应内容与本地服务器的请求内容匹配。

      如果CDN将响应内容重定向到本地服务器,而不是直接返回响应,那么浏览器将无法从CDN服务器直接访问到本地服务器的响应内容,从而无法保存cookie。在这种情况下,你需要在CDN服务的配置文件中设置正确的CDN设置,确保内容从CDN服务器直接返回到本地服务器。

      如果上述解决方案都无法解决问题,你可能需要进一步检查你的系统配置,或者寻求专业的Nginx或CDN技术支持帮助。在处理反向代理请求时,确保遵守相关法律法规,尊重用户隐私,避免任何可能的违规行为。

    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部