我是 Nginx 服务器的新手。最近开始工作 nginx 项目。我的任务是通过 nginx.conf 文件设置安全标头。我正确设置了一些标题,但无法为 Set-cookie 设置。我的要求是,在响应头中 Set-Cookie 应该具有 Secure 和 HTTPOnly 属性。在 nginx.conf 文件中添加了以下两个指令
set_cookie_flag HttpOnly Secure;
proxy_cookie_path / "/; HTTPOnly; Secure";
Run Code Online (Sandbox Code Playgroud)
也尝试了每一个和两个,但只有 HttpOnly 来了。请在下面查看我的 conf 文件片段
server {
listen 80;
server_tokens off;
server_name http://{{ getenv "PROXY_URL" }};
set_cookie_flag HttpOnly Secure;
proxy_cookie_path / "/; HTTPOnly; Secure";
include routes;
}
Run Code Online (Sandbox Code Playgroud)
请帮助我,我需要在这里添加什么或我错过了什么。
提前致谢。
nginx setcookie session-cookies nginx-reverse-proxy nginx-config
需要一些帮助来设置 nginx 日志,以便它们不会重复。
我的配置如下。我想要实现的是,http://example.com/app的所有日志都转到文件 app.access.log,而网站其余部分的日志则转到文件 main.access.log
但是,以下配置将应用程序日志记录到 app.access.log 和 main.access.log。
server {
access_log /var/log/nginx/main.access.log;
location /app {
access_log /var/log/nginx/app.access.log;
}
}
Run Code Online (Sandbox Code Playgroud)
知道如何解决这个问题吗?
Proxy_cache_lock逻辑意味着当NGINX同时接收到几个请求时,它只向上游发送一个,其余的等待第一个返回并插入缓存(等待时间如配置中所述proxy_cache_lock_timeout)。
如果缓存元素过期,并且NGINX同时接收到几个请求,它们都会被代理到上游。
问题:当缓存元素存在但已过期时,我如何将其配置NGINX为具有相同的逻辑proxy_cache_lock?
我检查了proxy_cache_use_stale但这不是我要找的,因为它在更新时返回过期的缓存,我需要等到答案从上游返回......
这是我当前的NGINX配置文件:
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
access_log /var/log/nginx/access.log main;
proxy_cache_path @MY_CACHE_PATH@; # this obviously has the path in my file
proxy_cache_use_stale updating;
proxy_cache_lock on;
proxy_cache_lock_timeout 15s;
proxy_cache_valid 404 10s;
proxy_cache_valid 502 0s;
proxy_cache one;
server {
listen 80;
proxy_read_timeout 15s;
proxy_connect_timeout 5s;
include locations.conf;
}
}
Run Code Online (Sandbox Code Playgroud)
我通过更改NGINX源代码设法实现了这种行为,但我想知道是否可以在配置中实现
我目前正在使用/测试NGINX反向代理设置中的微缓存功能,以获取动态内容。
发生的一个大问题是需要忽略的会话/ Cookie,否则人们将使用该站点上的随机帐户进行登录。
目前,我忽略了这样的流行CMS Cookie:
if ($http_cookie ~* "(joomla_[a-zA-Z0-9_]+|userID|wordpress_(?!test_)[a-zA-Z0-9_]+|wp-postpass|wordpress_logged_in_[a-zA-Z0-9]+|comment_author_[a-zA-Z0-9_]+|woocommerce_cart_hash|woocommerce_items_in_cart|wp_woocommerce_session_[a-zA-Z0-9]+|sid_customer_|sid_admin_|PrestaShop-[a-zA-Z0-9]+")
{
# set ignore variable to 1
# later used in:
# proxy_no_cache $IGNORE_VARIABLE;
# proxy_cache_bypass $IGNORE_VARIABLE;
# makes sense ?
}
Run Code Online (Sandbox Code Playgroud)
但是,如果我想向忽略列表添加更多的cookie,这将成为一个问题。更不用说根据文档,不建议在NGINX中使用太多“ if”语句。
我的问题是,是否可以使用map方法完成此操作?我看到map中的正则表达式是不同的(或者我错了)。
还是有另一种方法可以有效地忽略/绕过cookie?
我在stackoverflow上进行了大量搜索,尽管有很多不同的示例。我找不到适合自己需要的东西。
谢谢
更新:
在互联网上进行了大量的阅读和“挖掘”(我们不妨只说Google),我发现了很多有趣的例子。
但是,我对这些感到非常困惑,因为我不完全了解正则表达式的用法,而且我害怕在不了解正则表达式的情况下实现这种用法。
范例1:
map $http_cookie $cache_uid {
default nil;
~SESS[[:alnum:]]+=(?<session_id>[[:alnum:]]+) $session_id;
}
Run Code Online (Sandbox Code Playgroud)
在这个示例中,我注意到正则表达式与“ if”块中使用的正则表达式有很大不同。我不明白为什么模式开始时没有任何“”并且直接带有〜符号。
我不明白[[:alnum:]] +是什么意思?我搜索此文件,但是找不到文档。(或者我错过了)
我可以看到作者将默认设置为“ nil”,这不适用于我的情况。
范例2:
map $http_cookie $cache_uid {
default '';
~SESS[[:alnum:]]+=(?<session_id>[[:graph:]]+) $session_id;
} …Run Code Online (Sandbox Code Playgroud) 我在 Google App Engine 中使用 WordPress。当我创建 POST API 时,出现错误:“在从上游读取响应标头时,上游发送了太大的标头”。返回 502、错误网关、nginx
我在 POST API 中发送的数据(JSON)大约为 4kb。如果发送的数据低于 2kb,API 将返回成功。
我尝试了 App Engine 标准版和灵活环境,但遇到了同样的问题。
根据此链接: 上游在从上游读取响应标头时发送了太大的标头
使用缓冲区修改 nginx-app.config 文件将解决此问题。但这不起作用。
在 App Engine 中,默认的 nginx-app.config 如下所示。
location / {
try_files $uri /index.php?q=$uri&$args;
}
location ~ ^/wp-admin {
try_files $uri $uri/index.php?$args;
}
Run Code Online (Sandbox Code Playgroud)
不确定我需要在哪里添加这些代理缓冲区。
我尝试在默认位置中添加代理缓冲区,如下所示,但没有帮助。
location / {
try_files $uri /index.php?q=$uri&$args;
fastcgi_buffers 16 16k;
fastcgi_buffer_size 32k;
proxy_buffer_size 128k;
proxy_buffers 4 256k;
proxy_busy_buffers_size 256k;
}
Run Code Online (Sandbox Code Playgroud)
请帮助我解决这个问题。
google-app-engine google-app-engine-php app-engine-flexible nginx-config
Nginx 同时处理大量请求的最佳设置是什么?
我的服务器在 Ubuntu 20.04 LTS 上配置了 Nginx 和 PHP7.3。正在运行的应用程序是使用 Laravel 7 构建的。
这是我当前的配置:
location ~ \.php$ {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/var/run/php/php7.3-fpm.sock;
fastcgi_index index.php;
fastcgi_buffer_size 14096k;
fastcgi_buffers 512 14096k;
fastcgi_busy_buffers_size 14096k;
fastcgi_connect_timeout 60;
fastcgi_send_timeout 300;
fastcgi_read_timeout 300;
}
Run Code Online (Sandbox Code Playgroud)
我放置的 fastcgi 参数是通过 Google 找到的,并将数字调整为一些高值。
应用程序执行以下操作:
所有四个步骤都可以在几秒钟内完成。
完成此操作后,服务器的 CPU 和内存都没有达到峰值,唯一发生的事情是某些用户出现 502 超时。
看起来像 Nginx 中的服务器配置问题。
这是服务器发生时的统计信息:
旁注是我VerifyCsrfToken在 Laravel …
upstream我的Nginx 配置文件中有一个块。此块列出了多个后端服务器,通过这些服务器来平衡请求的负载。
...\nupstream backend {\n server backend1.com;\n server backend2.com;\n server backend3.com;\n}\n...\nRun Code Online (Sandbox Code Playgroud)\n上述 3 个后端服务器中的每一个都运行一个 Node 应用程序。
\nstop the application process在 backend1 - Nginx 识别到这一点,通过被动健康检查,流量将仅定向到 backend2 和 backend3,如预期的那样。power down the server托管 backend1,Nginx 不会识别出它已离线,并继续尝试向其发送流量/请求。Nginx 仍然尝试将流量引导到离线服务器,导致错误:504。有人可以解释一下为什么会发生这种情况(上面的场景 2)以及我是否缺少一些进一步的配置吗?
\n更新: \n我开始怀疑我所看到的行为是否是因为上面的上游块位于HTTP {}Nginx 上下文中。如果 backend1 确实断电,这将是一个连接错误,所以(也许这里偏离了目标,但只是大声思考)这应该是 TCP 健康检查吗?
更新2:
\nnginx.conf
user www-data;\nworker_processes auto;\npid /run/nginx.pid;\ninclude /etc/nginx/modules-enabled/*.conf;\n\nevents {\n worker_connections 768;\n # multi_accept on;\n}\n\nhttp {\n\n\n upstream …Run Code Online (Sandbox Code Playgroud) 设置时,ssl_session_cache我Nginx经常看到示例将其设置为两个选项之一:
ssl_session_cache shared:SSL:10m;或者ssl_session_cache shared:MozSSL:10m;
这两者有什么区别?
案例:我有通过 HTTPS 的 REST API,我想在我的主机上配置基本的缓存代理服务来缓存 API 请求并像往常一样更快地获取相同的信息。
我的 Nginx 配置如下:
proxy_cache_path /tmp/cache levels=1:2 keys_zone=my_cache:10m max_size=10g
inactive=60m use_temp_path=off;
http {
server {
location /my_api/ {
proxy_redirect off;
proxy_buffering on;
proxy_ignore_headers X-Accel-Expires;
proxy_ignore_headers Expires;
proxy_ignore_headers Cache-Control;
proxy_cache my_cache;
proxy_pass https://example.com/myapi/;
}
}
}
Run Code Online (Sandbox Code Playgroud)
现在我正在比较 REST API 和我的本地代理服务的响应时间,并且 REST API 对远程服务的调用和对带有缓存的本地代理服务的响应时间是相同的,因此,这意味着缓存不会工作。另外,缓存目录是空的。
真实 API 的示例或请求(这不是真实情况):
curl "https://example.com/myapi/?key=1"
Run Code Online (Sandbox Code Playgroud)
代理请求示例:
curl "http://127.0.0.1:8080/myapi/?key=1"
Run Code Online (Sandbox Code Playgroud)
在 REST API 标头中我可以看到
cache-control: max-age=0, no-cache, no-store, must-revalidate
Run Code Online (Sandbox Code Playgroud)
Nginx 能以某种方式忽略它吗?
我应该在代理配置中更改哪些内容才能看到 REST API 的提升?我想知道这个问题是否与 HTTPS 流量有关?或者 REST API 的响应可能有一些 NoChaching 标头,或者响应的大小对于缓存来说太小?
在默认的 nginx 配置文件中,我看到 default_type 设置为 application/octet-stream。我了解 MIME 类型,但不明白为什么我们要设置默认类型。这个配置有什么意义呢?有人可以帮助我理解这一点吗?
包括/etc/nginx/mime.types;default_type 应用程序/八位字节流;