我正在整理一个nginx反向代理。这是一个有效的nginx conf文件片段:
upstream my_upstream_server {
server 10.20.30.40:12345;
}
server {
server_name ssl-enabled.example.com;
listen 443 ssl;
ssl_certificate /etc/ssl/server.crt;
ssl_certificate_key /etc/ssl/server.key;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers HIGH:!aNULL:!MD5;
location / {
proxy_pass http://my_upstream_server/;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Host $server_name;
}
这使我们可以在不更改任何配置文件的情况下处理来自my_upstream_server的请求,并且在讨价还价中通过ssl提供服务。到目前为止一切都很好。
我真正想要做的是配置这个,以便我们可以将用户定向到https://ssl-enabled.example.com/,而不是转到https://ssl-enabled.example.com/upstream/。 (我想这样做,这样我们就可以运行多个虚拟主机,每个虚拟主机代理一个我们想要ssl启用的不同服务。)我尝试将位置线从location /
更改为{{1} };当我这样做时,应用程序的索引页面(https://ssl-enabled.example.com/upstream/)呈现正常,但它下面的页面会生成404错误。这是一个例子:
location /upstream/
Nginx尝试提供/some/link.html而不是/upstream/some/link.html,这不起作用。
我尝试创建一个将请求发送到/ upstream $ 1的重写,但对于主页面(nginx现在认为是https://.../upstream/),它进入无限循环,尝试服务/上游/上游/ upstream / ...,当然也失败了。
我怀疑我错过了既重要又简单的东西,但到目前为止,我还没弄清楚它可能是什么。文档可能提供线索,但如果确实如此,我没有看到它。任何来自nginx专家的帮助都会非常感激。感谢。
答案 0 :(得分:1)
下面的配置应该像您提到的那样进行类似的重定向而不进入循环:
upstream my_upstream_server {
server 10.20.30.40:12345;
}
server {
server_name ssl-enabled.example.com;
listen 443 ssl;
ssl_certificate /etc/ssl/server.crt;
ssl_certificate_key /etc/ssl/server.key;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers HIGH:!aNULL:!MD5;
location /upstream {
proxy_pass http://my_upstream_server/;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Host $server_name;
}
location / {
return 301 https://ssl-enabled.example.com/upstream$request_uri;
}
}
基本上是两个位置块。
一个用于以"上游"开头的请求,一个是服务的,另一个是没有被重定向的请求。
答案 1 :(得分:0)
Alexey对于/更容易使用是正确的,并且在他发表评论的时候,我开始认识到,因为我可以为example.com创建DNS条目,而不是试图将人们引导到{{3}为https://server.example.com/upstream/
创建DNS条目会容易得多这就是我所做的,看起来代码完全正是我想要的。感谢Alexey和Dayo的回复。