首頁  >  文章  >  運維  >  Nginx如何解決cookie跨域

Nginx如何解決cookie跨域

(*-*)浩
(*-*)浩原創
2019-07-15 13:28:377509瀏覽

隨著專案模組越來越多,許多模組現在都是獨立部署。模組之間的交流有時可能會透過cookie來完成。例如門戶和應用,分別部署在不同的機器或web容器中,假如用戶登陸之後會在瀏覽器客戶端寫入cookie(記錄著用戶上下文資訊),應用程式想要取得入口網站下的cookie,這就產生了cookie跨域的問題。

Nginx如何解決cookie跨域

解決cookie跨域問題之nginx反向代理

##反向代理概念

反向代理(Reverse Proxy)方式是指以代理伺服器來接受互聯網上的連接請求,然後將請求轉發給內部網路上的伺服器;並將從伺服器上得到的結果傳回給互聯網上請求連接的客戶端,此時代理伺服器對外就表現為一個伺服器。

反向代理伺服器對於客戶端而言它就像是原始伺服器,並且客戶端不需要進行任何特別的設定。客戶端向反向代理的命名空間(name-space)中的內容發送普通請求,接著反向代理將判斷向何處(原始伺服器)轉交請求,並將獲得的內容傳回給客戶端,就像這些內容原本就是它自己的一樣。

場景模擬

兩個工程web1, web2, 部署在同一台機器上的不同tomcat上,請求web1工程的index.html,如下:

 

Nginx如何解決cookie跨域

然後點選連結請求web2工程的index.jsp, 內容如下:

Nginx如何解決cookie跨域

再看一下nginx的設定:

利用nginx的方向代理來解決cookie跨域問題,其實是透過「欺騙」瀏覽器來實現的,透過nginx,我們可以將不同工程的cookie放到nginx域下,透過nginx反向代理就可以取到不同工程寫入的cookie。

其實上述場景中 $.cookie("user", "hjzgg", {path: "/web"}); 中的path可以寫成“/”, 這樣nginx的配置就更為簡單了,如下。

location /web1 {
            proxy_pass http://web1;
            proxy_set_header Host  127.0.0.1;
            proxy_set_header   X-Real-IP        $remote_addr;
            proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
 
            proxy_set_header Cookie $http_cookie;
            log_subrequest on;
        }
 
        location /web2 {
            proxy_pass http://web2;
            proxy_set_header Host  127.0.0.1;
            proxy_set_header   X-Real-IP        $remote_addr;
            proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
            proxy_set_header Cookie $http_cookie;
            log_subrequest on;
        }
更多Nginx相關技術文章,請造訪

Nginx使用教學欄位進行學習! 

以上是Nginx如何解決cookie跨域的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn