在我的企业内联网上,可以通过两种方式访问网站。使用其别名(例如)https://foo
或使用其完整地址(例如)https://foo.example.internal
。
我想配置我的 nginx 服务器以强制用户使用第二个选项。因此,如果他们浏览https://foo
,我希望 nginx 服务器将地址重写为https://foo.example.internal
。
我尝试了几种选择:
http {
server {
server_name foo;
# Test 1
rewrite ^https://foo/(.*)$ https://foo.example.internal/$1;
# Test 2
rewrite ^/foo/(.*)$ https://foo.example.internal/$1;
# Test 3
rewrite ^/(.*) https://foo.example.internal/$1;
}
}
Test1
和Test2
没有效果(即用户可以访问https://foo
或上的网站https://foo.example.internal
),而从到Test3
重写但最新不起作用(nginx 服务器没有返回任何内容,我怀疑该 URL 重写中存在一些循环)。https://foo
https://foo.example.internal
那么,我怎样才能强制 nginx 重写https://foo
为https://foo.example.internal
?
谢谢
答案1
终于找到了问题所在。可行的解决方案是通过设置 2 个服务器来完成的:
http {
server {
server_name foo;
listen 443 ssl;
return 301 https://foo.example.internal$request_uri;
}
server {
server_name foo.example.internal;
listen 443 ssl;
# rest of configuration
}
}