记一次nginx代理vue项目重定向问题
- 起因是这样的,公司项目重构,原项目使用html+php原生开发,新项目使用vue前后端分离方式
- 新项目上线要求用户使用相同域名切换访问新旧项目(体验新版,返回旧版),新旧项目部署在不同服务器
- 新旧网站设置cookie的值,代理到不同web服务,默认访问旧的站点
upstream oldsite {
server 127.0.0.1:856;
}
upstream newsite {
server newsite_ip:8089;
}
server {
listen 80 default_server;
server_name www.domain.com;
location / {
proxy_pass http://oldsite;
if ( $cookie_iWannaGoBack ~* ^.*old.*$ )
{
proxy_pass http://oldsite;
}
if ( $cookie_iWannaGoBack ~* ^.*new.*$ )
{
proxy_pass http://newsite ;
}
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_redirect off;
#client_max_body_size 500m;
proxy_set_header Host $host:$server_port;
proxy_set_header X-Real-IP $remote_addr;
#proxy_set_header X-Real-Port $remote_port;
#proxy_set_header REMOTE-HOST $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Host $server_name;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
server {
listen 856;
root "D:/project/public";
location / {
index index.php index.html error/index.html;
autoindex off;
}
location ~ \.php(.*)$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_split_path_info ^((?U).+\.php)(/?.+)$;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info;
include fastcgi_params;
}
}
到这里访问首页都能正常打开,可是vue项目在新窗口打开页面时301重定向了,
新开窗口代码:window.open(url, ‘_blank’)
场景复现:访问www.domain.com/about新开窗口,在新窗口卡了一会,然后跳转到www.domain.com:8089/about
预想访问链接是:www.domain.com/about
结果却是:www.domain.com:8089/about
排查了一遍应该是vue的一些配置没设置好,但又不知道怎么配置,所以就有了下面的处理方案:
- 使用nginx再重定向回去
server {
listen 8089 default_server;
server_name www.domain.com;
location / {
rewrite ^/(.*) http://www.domain.com$request_uri break;
}
}
就先这样吧~~~后面找到vue的解决方案再补充…
2023-05-31补充:在newsite 的nignx配置追加 port_in_redirect off;
server {
listen 8099;
location / {
root /var/www/nginx/html/website/dist;
index index.html index.htm;
try_files $uri $uri/ /index.html; #解决刷新页面变成404问题的代码
port_in_redirect off; # 追加
}
}