隨著專案模組越來越多,許多模組現在都是獨立部署。模組之間的交流有時可能會透過cookie來完成。例如門戶和應用,分別部署在不同的機器或web容器中,假如用戶登陸之後會在瀏覽器客戶端寫入cookie(記錄著用戶上下文資訊),應用程式想要取得入口網站下的cookie,這就產生了cookie跨域的問題。
解決cookie跨域問題之nginx反向代理
##反向代理概念反向代理(Reverse Proxy)方式是指以代理伺服器來接受互聯網上的連接請求,然後將請求轉發給內部網路上的伺服器;並將從伺服器上得到的結果傳回給互聯網上請求連接的客戶端,此時代理伺服器對外就表現為一個伺服器。 反向代理伺服器對於客戶端而言它就像是原始伺服器,並且客戶端不需要進行任何特別的設定。客戶端向反向代理的命名空間(name-space)中的內容發送普通請求,接著反向代理將判斷向何處(原始伺服器)轉交請求,並將獲得的內容傳回給客戶端,就像這些內容原本就是它自己的一樣。場景模擬
兩個工程web1, web2, 部署在同一台機器上的不同tomcat上,請求web1工程的index.html,如下: 然後點選連結請求web2工程的index.jsp, 內容如下: 再看一下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如何解決cookie跨域的詳細內容。更多資訊請關注PHP中文網其他相關文章!