Nginx 背后有几个面向外部的 Web 应用程序,如下所示:
https://app1.mycompany.com--> 服务器 1:8080/应用程序 1
https://app2.mycompany.com--> 服务器 2:8080/应用程序 2
https://app2.mycompany.com--> 服务器2:8080/应用程序3
我请求将 nginx 配置更新为使用子文件夹进行代理,但我们的系统管理员告诉我,由于请求 URL 本身已加密,因此在 https 下无法实现此操作。我们的系统管理员知识渊博且注重安全,他说的很有道理。但是,我曾在联合系统上工作过(作为应用程序开发人员),其中对子文件夹的 https 请求被代理到单独的应用程序。有人能帮助我了解实现以下目标需要哪种类型的设置吗:
https://www.mycompany.com/app1--> 服务器 1:8080/应用程序 1
https://www.mycompany.com/app2--> 服务器 2:8080/应用程序 2
https://www.mycompany.com/app3--> 服务器2:8080/应用程序3
答案1
它应该类似于下面的内容。只需使用指令指定 HTTPS 反向代理地址的文件夹location
,并使用指令地址指定内部位置的文件夹proxy_pass
。
server {
listen <ip_address>:443;
ssl on;
server_name <domain_name>;
### SSL cert files ###
ssl_certificate /etc/ssl/certs/local.crt;
ssl_certificate_key /etc/ssl/private/local.key;
### Add SSL specific settings here ###
ssl_protocols SSLv3 TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers RC4:HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
keepalive_timeout 60;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
location /app1 {
proxy_pass http://<internal_ip>:8080/app1;
proxy_set_header Accept-Encoding "";
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-Proto $scheme;
add_header Front-End-Https on;
proxy_redirect off;
}
location /app2 {
proxy_pass http://<internal_ip>:8080/app2;
proxy_set_header Accept-Encoding "";
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-Proto $scheme;
add_header Front-End-Https on;
proxy_redirect off;
location /app3 {
proxy_pass http://<internal_ip>:8080/app3;
proxy_set_header Accept-Encoding "";
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-Proto $scheme;
add_header Front-End-Https on;
proxy_redirect off;
}
}