nginx代理从https到http获取阻止加载混合活动内容错误

时间:2015-10-29 02:32:31

标签: jquery http https

我正在使用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

3 个答案:

答案 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

Source