在 Nginx 中,我们一直在尝试重定向 URL,如下所示:
http://example.com/some/path -> http://192.168.1.24
Run Code Online (Sandbox Code Playgroud)
用户仍然可以在浏览器中看到原始 URL。一旦用户被重定向,假设他们点击链接到/section/index.html
,我们希望它发出一个导致重定向的请求
http://example.com/some/path/section/index.html -> http://192.168.1.24/section/index.html
Run Code Online (Sandbox Code Playgroud)
并再次保留原始 URL。
我们的尝试涉及使用代理和重写规则的各种解决方案,下面显示了使我们最接近解决方案的配置(请注意,这是 Web 服务器的 Web 服务器配置example.com
)。但是,这仍然存在两个问题:
http://192.168.1.24
包含/some/path
并因此无法提供所需的页面。提供页面后将鼠标悬停在链接上时,/some/path
URL 中缺少
server {
listen 80;
server_name www.example.com;
location /some/path/ {
proxy_pass http://192.168.1.24;
proxy_redirect http://www.example.com/some/path http://192.168.1.24;
proxy_set_header Host $host;
}
location / {
index index.html;
root /var/www/example.com/htdocs;
}
}
Run Code Online (Sandbox Code Playgroud)我们正在寻找一种仅涉及更改example.com
. 我们可以更改192.168.1.24
(也是 Nginx)上的配置,但是我们想尝试避免这种情况,因为我们需要为数百个通过 代理访问的不同服务器重复此设置example.com
。
我想在 nginx 中创建一个规则来做两件事:
有很多关于如何单独执行这些操作的示例,但我无法找到一个正确执行这两项操作的解决方案(即不创建重定向循环并正确处理所有情况)。
它需要处理所有这些情况:
1. http://www.example.com/path
2. https://www.example.com/path
3. http://example.com/path
4. https://example.com/path
Run Code Online (Sandbox Code Playgroud)
这些都应该在https://example.com/path (#4) 结束而不循环。有任何想法吗?
我确定以前有人问过这个问题,但我找不到有效的解决方案。
一个网站切换了CMS服务,但是域名相同,如何设置单个页面的nginx重写?
例如
http://sitedomain.co.uk/content/unique-page-name
http://sitedomain.co.uk/new-name/unique-page-name
请注意,我不希望内容页面中的所有内容都被重定向,而实际上只是上面提到的 url。我有大约 9 个重定向要设置,其中不适合某个模式。
谢谢!
编辑:我找到了这个解决方案,它似乎有效,除了它没有斜线重定向:
if ( $request_filename ~ content/unique-page-name/ ) {
rewrite ^ http://sitedomain.co.uk/new-name/unique-page-name/? permanent;
}
Run Code Online (Sandbox Code Playgroud)
但这会重定向到:
http://sitedomain.co.uknew-name/unique-page-name/
是什么这三个变量的Nginx之间的差异$host
,$http_host
以及$server_name
?
我有一个重写规则,我不确定应该使用哪一个:
location = /vb/showthread.php {
# /vb/showthread.php?50271-What-s-happening&p=846039
if ($arg_p) {
return 301 $scheme://$host/forum/index.php?posts/$arg_p/;
}
Run Code Online (Sandbox Code Playgroud)
我正在寻找一个答案,不仅要说“在重写规则中使用 ___ 变量”,还要解释它们之间的理论差异。
我不明白 break 和 last (重写标志)之间的区别。文档相当深奥。我试图在我的一些配置中在两者之间切换,但我无法发现任何行为差异。有人可以更详细地解释这些标志吗?最好有一个例子,当将一个标志翻转到另一个时显示不同的行为。
nginx配置中location块后面的波浪号是什么意思?
例如
location ~ ^/download/(.*)$ {
alias /home/website/files/$1;
}
Run Code Online (Sandbox Code Playgroud)
有和没有 和有"~"
什么不一样 ?
我需要限制对目录“testdir”中任何文件或子目录的访问。我的配置:
...
location ~* ^.+\.(jpg|txt)$ {
root /var/www/site;
}
location /testdir {
deny all;
return 404;
}
...
Run Code Online (Sandbox Code Playgroud)
在我的配置中,我对 /testdir/jpg_or_txt-files 没有任何限制。怎么做?
我知道HttpRewriteModule,但我真的不知道如何处理正则表达式,我需要将某个目录中的所有 URL 重定向到另一个目录,特别是
example.com/component/tag/whatever
Run Code Online (Sandbox Code Playgroud)
到
example.com/tag/whatever
Run Code Online (Sandbox Code Playgroud)
有人能告诉我如何在 Nginx 中做到这一点吗?
我有一个简单的 nginx 反向代理:
server {
server_name external.domain.com;
location / {
proxy_pass http://backend.int/;
}
}
Run Code Online (Sandbox Code Playgroud)
问题是Set-Cookie
响应头包含;Domain=backend.int
,因为后端不知道它正在被反向代理。
如何让 nginx 重写Set-Cookie
响应头的内容,替换;Domain=backend.int
为;Domain=external.domain.com
?
Host
在这种情况下,不更改传递标头不是一种选择。
Apache httpd有此功能已有一段时间了,请参阅ProxyPassReverseCookieDomain
,但我似乎找不到在 nginx 中执行相同操作的方法。
关于 HAProxy reqrep 的真正快速问题。我正在尝试重写/替换发送到后端的请求。
我有以下示例域和 URI,它们共享相同的域名,但后端 Web 服务器池不同。
http://domain/web1
http://domain/web2
Run Code Online (Sandbox Code Playgroud)
我希望 web1 转到后端 webfarm1,而 web2 转到 webfarm2。目前这确实发生了。但是,当请求发送到后端时,我想去掉 web1 或 web2 URI。
这是我的 haproxy.cfg
frontend webVIP_80
mode http
bind :80
#acl routing to backend
acl web1_path path_beg /web1
acl web2_path path_beg /web2
#which backend
use_backend webfarm1 if web1_path
use_backend webfarm2 if web2_path
default_backend webfarm1
backend webfarm1
mode http
reqrep ^([^\ ]*)\ /web1/(.*) \1\ /\2
balance roundrobin
option httpchk HEAD /index HTTP/1.1\r\nHost:\ example.com
server webtest1 10.0.0.10:80 weight 5 check slowstart 5000ms
server …
Run Code Online (Sandbox Code Playgroud)