2017-07-03 48 views
0

我正在爲一個網站設置nginx。我只想設置一些子鏈接到ssl鏈接用戶登錄,註冊.i創建一個讓加密ssl和證書工作正常。我檢查了ssl購物者。我想配置ssl只爲商店不是所有的site.so我重定向商店從80到443,只有商店想工作的SSL。但在我配置了 後,nginx的一些按鈕(javascriptvoid)無法正常工作。它說混合內容,所以當我檢查查看源代碼時,它顯示的按鈕的url仍然是在商店頁面中的http(它應該是https)。SSL不能在nginx 443配置上工作

我檢查一切,我重新配置nginx,檢查tomcat端,都是oky.i不知道什麼是問題。

我的nginx的配置是在這裏爲你

(的(/子)子位置是我想要的工作HTTPS一)

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

查看源代碼結果爲按鈕

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

當我點擊按鈕這個錯誤messa 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人被困在THI爲近一週我修復this.i不是一個程序員我是系統管理員。和新的nginx.please幫助。

+0

你的nginx配置在哪裏? –

+0

嗨,歡迎來到Stack Overflow,請花一點時間通過[歡迎導覽](https://stackoverflow.com/tour)瞭解你在這裏的方式(並獲得你的第一張徽章),閱讀如何創建一個[Minimal,Complete和Verifiable示例](https://stackoverflow.com/help/mcve)並檢查[如何提出好問題](https://stackoverflow.com/help/how-to-ask ),所以你增加了獲得反饋和有用答案的機會。 – DarkCygnus

+0

@RobertMoskal @RobertMoskal我在這裏輸入nginx配置代碼的main.conf – fatha

回答

0

最後我們發現問題並在3周後解決了問題。 問題在於代理ip。我們使用nginx服務器進行重定向並進行代理。所以我們需要在tomcat中的server.xml中添加關於nginx服務器ip的aditional enty。這裏是條目。

<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(例如,圖像,CSS,JavaScript)下發出輔助請求。

當您在HTTPS下使用請求時,所有後續請求也必須是HTTPS。您需要將按鈕的網址轉換爲「https://」

+0

它是後端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的請求的方案爲'http'而非'https',那麼您將收到錯誤。 如果你管理這個代碼,那麼你需要做一個檢查,當端口是443時強制該方案是'https'。 – jhenderson2099

+0

你能否向我解釋如何從nginx服務器塊做到這一點。這將是一個很大的幫助。 – fatha