我正在使用nginx(openresty),我正在尝试使用https在公共网络上使用https设置代理到私有10网络上的apache服务器。我试图代理的应用程序是openscrum。页面加载,但一些javascript(jquery和更多)试图通过http而不是https。使用firebug我看到了这些错误:
Blocked loading mixed active content "http://privateurl.com/js/jquery-ui-1.9.2.custom.min.js"
我无法弄清楚解决方案是什么,这是我用于nginx虚拟主机的内容:
upstream SVRLINK {
server 10.100.200.25;
}
server {
listen 80;
server_name mgt.privateurl.com.com;
rewrite ^ https://$server_name$request_uri? permanent;
}
server {
listen 443 ssl;
server_name mgt.privateurl.com.com;
ssl on;
ssl_certificate /opt/services/configs/mgt/cert.pem;
ssl_certificate_key /opt/services/configs/mgt/key.pem;
ssl_client_certificate /opt/services/certs/public_certs/mychain.pem;
ssl_verify_depth 5;
# ssl_verify_client on;
ssl_prefer_server_ciphers on;
ssl_protocols SSLv3 TLSv1;
ssl_ciphers ALL:!aNULL:!ADH:!eNULL:!LOW:!EXP:RC4+RSA:+HIGH:+MEDIUM;
client_max_body_size 20m;
error_log /etc/openresty/nginx/logs/error debug;
access_log /etc/openresty/nginx/logs/access;
location / {
proxy_read_timeout 300;
proxy_connect_timeout 300;
# proxy_redirect off;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://SVRLINK;
proxy_redirect http:// https://;
}
}
关于如何使其发挥作用的任何想法?感谢您抽出宝贵时间。
-stabiuti
答案 0 :(得分:1)
我可能迟到将近五年了,但是我最近遇到了这个问题,对我来说,解决方案是在HTML页面中设置的:
<base href="/" />
在nginx中设置以下内容:
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://your_server_host:your_server_port;
答案 1 :(得分:0)
这很可能与你的nginx无关,而且与网络应用程序的HTML有很大关系。
如果他们在脚本和css标签中有硬编码的http,那么您经常会看到这些问题。检查前端模板,有很好的技巧,比如使用协议短网址(https://blog.httpwatch.com/2010/02/10/using-protocol-relative-urls-to-switch-between-http-and-https/)
就像这样,浏览器可以使用https或http,具体取决于页面的服务方式。
答案 2 :(得分:0)
您可以尝试将以下代码行放在Apache的站点配置文件的开头(在&#34; VirtualHost&#34;块之外):
SetEnvIf X-Forwarded-Proto "^https$" HTTPS=on