标签: rewrite

Nginx 通过代理重定向、重写和保留 URL

在 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)。但是,这仍然存在两个问题:

  • 它没有正确执行重写,因为 Web 服务器收到的请求 URLhttp://192.168.1.24包含/some/path并因此无法提供所需的页面。
  • 提供页面后将鼠标悬停在链接上时,/some/pathURL 中缺少

    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

rewrite nginx proxy redirect

83
推荐指数
3
解决办法
27万
查看次数

删除“www”并使用 nginx 重定向到“https”

我想在 nginx 中创建一个规则来做两件事:

  1. 删除“www”。从请求 URI
  2. 如果请求 URI 是“http”,则重定向到“https”

有很多关于如何单独执行这些操作的示例,但我无法找到一个正确执行这两项操作的解决方案(即不创建重定向循环并正确处理所有情况)。

它需要处理所有这些情况:

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) 结束而不循环。有任何想法吗?

rewrite ssl nginx https

70
推荐指数
3
解决办法
5万
查看次数

Nginx 将一条路径重定向到另一条路径

我确定以前有人问过这个问题,但我找不到有效的解决方案。

一个网站切换了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/

rewrite nginx

70
推荐指数
4
解决办法
25万
查看次数

Nginx 变量 $host、$http_host 和 $server_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)

我正在寻找一个答案,不仅要说“在重写规则中使用 ___ 变量”,还要解释它们之间的理论差异。

rewrite nginx

66
推荐指数
2
解决办法
6万
查看次数

nginx url 重写:break 和 last 之间的区别

我不明白 break 和 last (重写标志)之间的区别。文档相当深奥。我试图在我的一些配置中在两者之间切换,但我无法发现任何行为差异。有人可以更详细地解释这些标志吗?最好有一个例子,当将一个标志翻转到另一个时显示不同的行为。

rewrite nginx

64
推荐指数
2
解决办法
6万
查看次数

Nginx - nginx.conf 的位置块中 ~(波浪号)的含义?

nginx配置中location块后面的波浪号是什么意思?

例如

location ~ ^/download/(.*)$ {
  alias /home/website/files/$1;
}
Run Code Online (Sandbox Code Playgroud)

有和没有 和有"~"什么不一样 ?

rewrite nginx

62
推荐指数
1
解决办法
5万
查看次数

如何限制对目录和子目录的访问

我需要限制对目录“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 没有任何限制。怎么做?

rewrite nginx deny

49
推荐指数
4
解决办法
11万
查看次数

如何使用 HttpRewriteModule 在 Nginx 中快速轻松地删除部分 URL?

我知道HttpRewriteModule,但我真的不知道如何处理正则表达式,我需要将某个目录中的所有 URL 重定向到另一个目录,特别是

example.com/component/tag/whatever
Run Code Online (Sandbox Code Playgroud)

example.com/tag/whatever
Run Code Online (Sandbox Code Playgroud)

有人能告诉我如何在 Nginx 中做到这一点吗?

rewrite nginx redirection

35
推荐指数
1
解决办法
8万
查看次数

如何在nginx反向代理中重写Set-Cookie的域部分?

我有一个简单的 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 中执行相同操作的方法。

rewrite nginx reverse-proxy cookies

31
推荐指数
2
解决办法
9万
查看次数

HAProxy reqrep 在后端请求中删除 URI

关于 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)

rewrite load-balancing haproxy uri

30
推荐指数
2
解决办法
5万
查看次数