nginx怎么配置客户端保存cookie

问题

在部署一个前人留下的dotnet core后台服务,在服务器上小心翼翼的修改前端代码,把ajax请求地址换成了localhost,登录、请求数据正常。但是把localhost换成ip地址,发现登录正常,cookie也返回了,但验证登录状态(向后台发送请求,验证携带的cookie)时报错了,一直401

这个程序的前端、后端都不是我写的,问了前端开发:

在使用Nginx时如何配置客户端保存cookie

虽然cookie成功返回,但在接下来的请求中并未携带cookie的请求头。奇了怪,然后就发现了:

根据提示,浏览器是想保存cookie的,但Set-Cookie里面设置了Secure,就被阻止了。

解决

那我就把Secure去掉!同时samesite=none也要修改,因为samesite=none必须要和secure连用,可以把值改成strict

Strict规则最为严格,是完全禁止发送第三方Cookie的,无论在跨站点访问时的任何情况下。仅当当前页面的 URL 与请求的目标相符时,才会携带Cookie。

nginx里面设置:

proxy_cookie_flags ~ nosecure samesite=strict;

再说点

cookie属性secure是只能在https下访问,我这里是从https环境迁移至http环境(这种逆向不安全的方式还是不要学)。

我设置的nginx如下,但具体情况还要考虑实际用途:

location /rf/ {
proxy_pass http://localhost:5001/;

proxy_set_header Host $host;

proxy_set_header X-Real-IP $remote_addr;

proxy_set_header X-Real-PORT $remote_port;


proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

proxy_set_header X-Forwarded-Proto $scheme;


proxy_cookie_path / /;

proxy_set_header Cookie $http_cookie;

proxy_cookie_flags ~ nosecure samesite=strict;

}

Nginx是一款高性能的Web服务器和反向代理服务器,其流行程度被众多网站所采用。为了保证用户的浏览体验,有些网站需要记录用户的登录信息并保存在cookie中,而Nginx作为反向代理服务器则需要做好相应的配置,以确保客户端能够正确保存cookie。
1. 设置cookie域名
当使用反向代理时,需要将客户端发送到服务器上的请求头信息中的`Set-Cookie`字段中的域名改成该反向代理服务器的域名。这可以通过在 Nginx 的配置文件中设置`proxy_cookie_domain`来实现。
proxy_cookie_domain subdomain.old-domain.com new-domain.com;
2. 写入cookie
如果需要在Nginx中写入cookie,可以使用 Nginx 的`add_header`指令实现。在需要写入cookie的请求头中加入以下代码:
add_header Set-Cookie \"key=value; Expires=Wed, 09 Jun 2021 10:18:14 GMT; Path=/; Domain=.domain.com;\";
这里的`key`和`value`可以根据需要进行修改。
3. 代理cookie
有时需要在反向代理中代理cookie,这可以通过在Nginx的配置文件中设置`proxy_set_header`指令来实现。
proxy_set_header Cookie $http_cookie;
这样就可以将客户端所发送的cookie信息一起发送给服务器。
4. 加密cookie
为了保证cookie信息的安全性,在Nginx中可以使用加密算法对cookie进行加密。Nginx中的加密主要有两种方式,一种是使用 `SHA1` 算法,另外一种是使用`MD5`算法。
使用SHA1算法的加密方法示例:
set_sha1 $ctx_sha1 'value';
add_header Set-Cookie \"key=$ctx_sha1; ...\"
Nginx配置对于cookie的处理可以根据实际情况进行设置,本文提供的方法只是一种参考,理解其原理和机制也是至关重要的。