Nginx 請問 nginx 中 server 帶有多個 location,那如何在瀏覽器中對 location 的緩存做標識

vip5529780 · 2019年08月15日 · 最后由 vip5529780 回复于 2019年08月19日 · 5740 次阅读

在配置反向代理的時候遇到了一個問題就是我在 nginx 中配置了 server 對應多個 location,每個 location 都是轉發到不同的目標網站 配置文件如下 CC:8083\CC:8080\CC:8088 這三個網站文件結構類似,但屬於不同的業務模塊, 現在有個問題就是我在同一瀏覽器中先訪問了 http://AA/OA 網站是可以正常打開的, 然後我再去訪問http://AA/OEDI時網站就異常了登錄成功無法正常跳轉, 後來發現是緩存文件的問題,清理文件緩存然後再去訪問http://AA/OEDI是正常的。 首次訪問了 OA 時瀏覽器緩存了 OA 的文件,再次訪問 OEDI 時調用了 OA 的緩存導致了跳轉失敗, 請問這種問題有什麼好的決解方法嗎?如何給緩存做標識?

server {
       listen       80;
       server_name  AA;
       fastcgi_read_timeout 600; #設置服務響應超時問題 如果不設置WEB表單加載時間長的話會報錯(s)
       fastcgi_send_timeout 600; #設置服務響應超時問題 如果不設置WEB表單加載時間長的話會報錯(s)
       client_max_body_size 30m; #設置通過反向代理訪問web可上傳文件的最大值(m)
       location /OA/
       {       
           root   html;
               proxy_pass https://CC:8083/;
           proxy_pass_request_headers on;
               if ( $host ~ "https://CC:8083" )
           {
                   rewrite ^/(.*)$ /OA/$1 last;        
           }
           if ($document_uri ~ http://AA/)
           {
                   rewrite ^/(.*)$ /OA/$1 last;        
           }
           if ( $Uri ~ "https://CC:8083" )
           {
                   rewrite ^/(.*)$ /OA/$1 last;        
           }
           if ( $Uri ~ "https://AA" )
           {
                   rewrite ^/(.*)$ /OA/$1 last;        
           }
       }
       location /OEDI/ 
       {
           root   html;
           proxy_pass https://CC:8088/;
           #proxy_redirect http://$host/;
           proxy_pass_request_headers on;
           if ( $host ~ "https://CC:8088" )
           {
                   rewrite ^/(.*)$ /OEDI/$1 last;      
           }
           if ($document_uri ~ http://AA/)
           {
                   rewrite ^/(.*)$ /OEDI/$1 last;      
           }
           if ( $Uri ~ "https://CC:8088" )
           {
                   rewrite ^/(.*)$ /OEDI/$1 last;      
           }
           if ( $Uri ~ "https://AA" )
           {
                   rewrite ^/(.*)$ /OEDI/$1 last;      
           }

       }
       location / {
           root   html;
           if ($http_cookie ~* "SEDI") {
                           rewrite   ^/(.*)$  /SEDI/$1  last;      
                       }
           if ($http_cookie ~* "OEDI") {
                           rewrite   ^/(.*)$  /OEDI/$1  last;      
                       }
           if ($http_cookie ~* "OA") {
                           rewrite   ^/(.*)$  /OA/$1  last;        
                       }
       }
       location /SEDI/
       {       root   html;
               proxy_pass https://CC:8080/;
           #proxy_redirect http://$host/;
           proxy_pass_request_headers on;
           if ( $host ~ "https://CC:8080" )
           {
               rewrite ^/(.*)$ /SEDI/$1 last;      
           }
           if ( $host ~ "http://http://AA" )
           {
               rewrite ^/(.*)$ /SEDI/$1 last;      
           }
           if ($document_uri ~ http://AA/)
           {
               rewrite ^/(.*)$ /SEDI/$1 last;      
           }
           if ( $Uri ~ "https://CC:8088" )
           {
                   rewrite ^/(.*)$ /SEDI/$1 last;      
           }
           if ( $Uri ~ "https://AA" )
           {
               rewrite ^/(.*)$ /SEDI/$1 last;      
           }
       }
   }

哪里的缓存文件,感觉你这个是前端缓存,跟 Nginx 没什么关系吧

hiveer 回复

是前端緩存,因為現在一個域名掛了三個網站,在前端都是通過這個域名加標識符來去訪問目標網站,所以現在導致一個問題就是在這個域名下的三個網站的緩存共用了,導致先訪問了 A 之後再訪問 B 就不行了

需要 登录 后方可回复, 如果你还没有账号请 注册新账号