使用nginx 1.2.1我可以使用add_header以下方法添加多个标头:
server {
listen 80;
server_name localhost;
root /var/www;
add_header Name1 Value1; <=== HERE
add_header Name2 Value2; <=== HERE
location / {
echo "Nginx localhost site";
}
}
Run Code Online (Sandbox Code Playgroud)
结果
GET /
HTTP/1.1 200 OK
Name1: Value1
Name2: Value2
Run Code Online (Sandbox Code Playgroud)
但是,我一使用add_header里面的指令location,下面的其他add_header指令就会server被忽略
server {
listen 80;
server_name localhost;
root /var/www;
add_header Name1 Value1; <=== HERE
add_header Name2 Value2; <=== HERE
location / {
add_header Name3 Value3; <=== HERE
add_header Name4 …Run Code Online (Sandbox Code Playgroud) 我有一个基于 nginx 的 HTTP 代理,我想在其中处理所有 HTTP 重定向,以便客户端仅获得重定向链中的最后一个响应。
基本代码如下所示:
location /proxy {
rewrite ^/proxy/([^/]+) $1 break;
proxy_pass http://$uri/;
}
Run Code Online (Sandbox Code Playgroud)
我对以下 1 级重定向的尝试是这样的:
error_page 301 302 307 =200 @redir;
Run Code Online (Sandbox Code Playgroud)
...并拥有这个命名位置:
location @redir {
proxy_pass $proxy_location;
}
Run Code Online (Sandbox Code Playgroud)
只有没有 $proxy_location 变量,我找不到创建它的方法。它应该包含Location:从上游接收到的标头值。
有什么想法吗?
如果在我的配置文件中设置,我不会注意到任何区别
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
Run Code Online (Sandbox Code Playgroud)
或者:
fastcgi_param SCRIPT_FILENAME $request_filename;
Run Code Online (Sandbox Code Playgroud)
他们分别做什么?两者之一比另一个更好吗?
提前致谢。
如果尚未设置,我需要将变量设置为默认值。以下配置完成这项工作:
if ($foo ~ "^$") {
set $foo default-value;
}
Run Code Online (Sandbox Code Playgroud)
但它会生成运行时警告:
使用未初始化的“foo”变量
有没有办法测试是否设置了变量而不生成警告并且不全局关闭警告:
uninitialized_variable_warn off;
Run Code Online (Sandbox Code Playgroud) 我需要在 Nginx 中创建一个非常简单的映射,将子路径重定向到位于同一子网中的另一台服务器。
我试着把它放在服务器部分
location /tomcatapi/ {
rewrite /tomcatapi/(.*) $1 break;
proxy_pass http://192.168.0.3:8443;
}
Run Code Online (Sandbox Code Playgroud)
但是我访问http://www.myservice.com/tomcatapi/是一个 500 错误页面,在 nginx 日志文件中我有这个错误:
the rewritten URI has a zero length
Run Code Online (Sandbox Code Playgroud)
我在这个 conf 中缺少什么?
我试图更好地理解 nginx 并尝试形成一个正则表达式,其中每个不匹配的 url 都/api/postdataV1被路由到不同的服务器集群。我一直在例子中看到这两件事,没有解释
location ~ {some regex}
location ~* (some regex}
Run Code Online (Sandbox Code Playgroud)
我的第一个问题是这些是什么~和~*(我认为~只是意味着我指定一个正则表达式?),但怎么样~*呢?
我想我想要的是这个。这是正确的吗?
location ~ ^/api/postdataV1$ {
#matches to this route to where I want
}
location / {
#This will be everything except /api/postdataV1 I think
}
Run Code Online (Sandbox Code Playgroud)
这是正确的吗?但是~*……我不明白那个
谢谢,院长
在站点页面和主页上的某些时间之间切换时显示 502 错误网关错误,但不是主页上的第一个请求,只有在另一个页面重定向到它时才会显示。它发生在一些 javascript 文件中
在两个上游配置的负载均衡 php1 php2 都是 apache 服务器。
当我检查错误日志时,我喜欢:
no live upstreams while connecting to upstream
[error] 27212#0: *314 no live upstreams while connecting to upstream, client: ip_address , server: example.com, request: "GET / HTTP/1.1", upstream: "http://example.com", host: "example.com", referrer: "http://example.com/mypages/"
Run Code Online (Sandbox Code Playgroud)
这是负载平衡服务器配置
upstream example.com {
# ip_hash;
server php01 max_fails=3 fail_timeout=15s;
server php02 max_fails=3 fail_timeout=15s;
}
server {
listen IP:80;
server_name example.com;
access_log /var/log/nginx/example.com.access;
error_log /var/log/nginx/example.com.error error;
location / {
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header …Run Code Online (Sandbox Code Playgroud) 我在 nginx 上有一个反向代理,它代理了很多站点。我最近为所有启用 SSL 的网站启用了 HTTP Strict Transport Security。我现在有一个不想启用此功能的站点。
我想我会做一个简单的检查,如果我的上游已经给我发送了一个Strict-Transport-Security-header,如果没有,就添加一个。这样,我的上游可以发送包含max-age=0避免代理启用 HSTS的 STS 标头。
我以为我只需按如下方式更改我的配置:
location / {
proxy_pass http://webservers;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header X-Forwarded-Proto "https";
if ($upstream_http_strict_transport_security = "") {
add_header Strict-Transport-Security "max-age=15552000";
}
}
Run Code Online (Sandbox Code Playgroud)
但是,可能是因为if 是 evil,这不起作用。我尝试了很多不同的方法来确保变量确实存在(就是这种情况),但似乎没有任何帮助。
我怎么能让这个工作?
我如何减轻 POODLE 攻击,但仍保持对旧客户端的支持,例如 Windows XP 上的 IE6 或电子邮件客户端。
我注意到谷歌这样做:https : //www.ssllabs.com/ssltest/analyze.html?d=mail.google.com
我正在使用 nginx 和 openssl。
此外,我想对现代/大多数浏览器保持正向保密。我想在 ssllabs 上保持 A 级。
我在 Ubuntu 16.04 上安装了来自 ppa 的最新 NGINX。
nginx 版本:nginx/1.12.1
根据我的理解,它应该支持流和 UDP 负载均衡。
但我收到此错误消息:
nginx: [emerg] "stream" directive is not allowed here in /etc/nginx/conf.d/load-balancer.conf:3
Run Code Online (Sandbox Code Playgroud)
这是我的配置 /etc/nginx/conf.d/load-balancer.conf
stream {
upstream backend {
least_conn;
server 172.31.9.51 fail_timeout=10s;
server 172.31.20.140 fail_timeout=10s;
}
server {
listen 500 udp;
listen 4500 udp;
proxy_pass backend;
proxy_timeout 1s;
proxy_responses 1;
error_log logs/dns.log;
}
}
Run Code Online (Sandbox Code Playgroud) nginx ×10
502 ×1
fastcgi ×1
gateway ×1
http-headers ×1
poodle ×1
proxy ×1
ssl ×1
ubuntu ×1
ubuntu-16.04 ×1
udp ×1
web-server ×1