2017-07-03 9 views
0

ウェブサイトのnginxを設定しています。私はいくつかのサブリンクのためだけにSSIリンクユーザーのログインに設定したいと思っています.iを作成すると、sslを暗号化でき、証明書がうまくいきます。私はssl買い物客をチェックしました。私はすべてのsite.so私は80から443に店舗をリダイレクトし、ストアだけがsslを動作させたいストアのためのsslを設定したいと思います。しかし、私は をnginxに設定した後、いくつかのボタン(javascriptvoid)は動作しません。その内容が混在しているので、ビューのソースを確認すると、ボタンのURLがまだストアページのhttpであることが示されます(httpsにする必要があります)。SSLがnginx 443の設定で動作しない

私はすべてをチェックし、nginxを再設定して、tomcat側を確認してください。すべて問題ありません。

私のnginxの構成がためにここにいるあなた

nginxの構成

upstream backend_front { 
    ip_hash; 

    server tomcat_serverip:8080; 

} 

server { 
    listen  80; 
    server_name www.domianname.com; 

    charset utf-8; 

    access_log /var/log/nginx/80access.log main; 

    location/{ 
    proxy_pass http://backend_front; 

     proxy_set_header Host $host; 
     proxy_set_header X-Real-IP $remote_addr; 
     proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
    } 


    location /sub/ { 

     if ($http_x_forwarded_proto != 'https') { 
      return  301 https://$server_name$request_uri; 
     } 

     proxy_pass http://backend_front; 

     proxy_set_header Host $host; 
     proxy_set_header X-Real-IP $remote_addr; 
     proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 

    } 

} 

server { 
    listen  443 ssl; 
    server_name www.domainname.my; 

    ssl on; 
    ssl_certificate   /etc/letsencrypt/live/fullch.pem; 
    ssl_certificate_key  /etc/letsencrypt/live/privkey.pem; 

    ssl_session_cache shared:SSL:20m; 
    ssl_session_timeout 15m; 

    ssl_prefer_server_ciphers  on; 
    ssl_protocols     TLSv1 TLSv1.1 TLSv1.2; 
    ssl_ciphers      ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:ECDH+3DES:DH+3DES:RSA+AESGCM:RSA+AES:RSA+3DES:!aNULL:!MD5:!DSS; 


    charset utf-8; 
    access_log /var/log/nginx/443access.log main; 

    add_header Strict-Transport-Security "max-age=31536000"; 


     root /data/resources/; 

location /sub/ { 

     proxy_pass http://backend_front; 

     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; 


    } 

    location/{ 
     proxy_pass http://backend_front; 

     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; 
} 


    # for static files caching 
    location ~ .*\.(html|jsp)?$ { 
     proxy_pass http://backend_front; 

     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; 
    } 

    location ~ .*\.(gif|jpg|jpeg|bmp|png|ico|txt|js|css)$ { 
     root /data/resources/; 
     expires 20m; 
    } # for static files caching -- end 

    location ~ /favicon\.ico { 
     root html; 
    } 

    location ~ /\. { 
     deny all; 
    } 
} 

ソース表示結果((/サブ)サブの場所は、私がhttpsを仕事をしたいものです)ボタンの場合

<a href="javascript:void(0)" url="http://www.example.com/store/account.htm" onclick="tiaozhuan(this)" style="padding:0px">Manage Account</a> 
<a href="javascript:void(0)" url="http://www.example.com/store/order.htm" onclick="tiaozhuan(this)" style="padding:0px">My Orders</a> 

このエラーメッセージをクリックするとGEは(しかし、HTTPその作業罰金のため。)

jquery-1.8.3.min.js:2 Mixed Content: The page at 'https://www.example.com/store/account.htm' was loaded over HTTPS, but requested an insecure XMLHttpRequest endpoint 'http://www.example.com/isLogin.htm'. This request has been blocked; the content must be served over HTTPS. 
send @ jquery-1.8.3.min.js:2 
ajax @ jquery-1.8.3.min.js:2 
tiaozhuan @ account.htm:155 
onclick @ account.htm:77 

this.iは、私はプログラマではないよ修正するthis.iの男は最後の1週間THIに貼り付けています私を助けてくださいGoogle Chromeの要素のコンソール上に表示しますシステム管理者これについてのnginx.pleaseヘルプの新機能です。

+0

あなたのnginx設定はどこですか? –

+0

こんにちは、序列のオーバーフローを歓迎します。[welcome tour](https://stackoverflow.com/tour)を訪れて、ここで(あなたの最初のバッジを獲得する)あなたのやり方を知り、方法を読んでください[Minimal、Complete、Verifiable example](https://stackoverflow.com/help/mcve)を作成し、[How to Ask Good Questions](https://stackoverflow.com/help/how-to-ask)もチェックしてください。 )あなたはフィードバックと有用な答えを得る機会を増やします。 – DarkCygnus

+0

@RobertMoskalここでは、nginxの設定コード – fatha

答えて

0

最後に、問題を見つけて3週間後に問題を解決しました。 問題は、プロキシipのbeacuseです。我々はリダイレクトとプロキシのためにnginxサーバーを使用しています。私たちはnginxサーバーについてのtomcatのserver.xmlに追加のentyを追加する必要があります。ip .hereはエントリです。

<Valve className="org.apache.catalina.valves.RemoteIpValve" internalProxies="111\.111\.111\.111" remoteIpHeader="X-Forwarded-For" protocolHeader="X-Forwarded-Proto" protocolHeaderHttpsValue="https" httpsServerPort="443" /> 

したがって、内部プロキシはNginx IPです。

0

「混在コンテンツ」とは、通常、読み込まれた後、HTTPとHTTPSの両方で2次要求を行うページを指します(画像、CSS、JavaScriptなど)。

HTTPSでmake要求を使用する場合、以降のすべての要求もHTTPSでなければなりません。ボタンのURLを「https://」に変換する必要があります

+0

のmain.confをバックエンドjavaからwebpathメソッドを入力します。 public static String getURL(HttpServletRequest request){ String contextPath = request.getContextPath()。 ( "/")と等しいか? "":request.getContextPath(); int port = null2Int(Integer.valueOf(request.getServerPort())); System.out.println(request.getScheme()); String url = request。getScheme()+ "://"; url + = request.getServerName(); if(port!= 80 && port!= 443){ url + = ":" + port; url + = contextPath; } else { url = url + contextPath; } return url; } – fatha

+0

返信URLを生成するために使用されたリクエストに 'https'ではなく 'http'のスキームがある場合、エラーが発生します。 このコードを管理している場合は、ポートが443のときにスキームを「https」に強制的にチェックする必要があります。 – jhenderson2099

+0

nginxサーバーブロックから行う方法を教えてください。それは大きな助けになるだろう。 – fatha

関連する問題