nginx配置同一域名下,共存2个nodejs项目

项目背景:

1、官网需要改版,使用nodejs nuxt框架进行重构

2、官网改版没有全部完成、但需要上线首页

项目需求:

1、让首页内容显示为新项目

2、让老官网的内容可以被访问到(比如www.n.com/cart,但新项目没有cart接口)

3、首页域名必须是www.n.com

这样的话就会引出一些问题,比如我nginx配置的后端,目前是7100端口,但是新项目端口为3000,如果我直接替换location / port:3000,这样替换势必会使旧官网项目404

旧官网nginx配置如下:

server {
    listen  80;
    listen  443 ssl;
    server_name www.n.com
    include      ssl/niu.com;
    include      error/40x;
    include      error/50x;
    location / {
        proxy_pass http://127.0.0.1:7100;
        add_header ‘Access-Control-Allow-Origin‘ ‘*‘;
        add_header ‘Access-Control-Allow-Credentials‘ ‘true‘;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;

        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
    }
}

  

解决过程:

从nginx下手,一开始尝试的一种为多写一层location,locatin = /   prot=3000    location / port=7100

这样解决是比较方便的解决方案,先匹配3000端口,3000端口匹配不到就去7100端口,配置文件如下:

server {
    listen  80;
    listen  443 ssl;
    server_name www.n.com
    include      ssl/niu.com;
    include      error/40x;
    include      error/50x;
    location = / {
        proxy_pass http://127.0.0.1:3000;
        add_header ‘Access-Control-Allow-Origin‘ ‘*‘;
        add_header ‘Access-Control-Allow-Credentials‘ ‘true‘;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;

        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
    }
    location / {
        proxy_pass http://127.0.0.1:7100;
        add_header ‘Access-Control-Allow-Origin‘ ‘*‘;
        add_header ‘Access-Control-Allow-Credentials‘ ‘true‘;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;

        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
    }
}  

 但是!虽然这种解决方方案可以配置成功,但是由于我前端使用的是nuxt框架,这个框架有个比较坑的axios插件。

这个插件需要写死域名:我写的是www.n.com ,他会去dns上搜一下有没有www.n.com ,如果搜到了,和自己的node进程也匹配上了,才会访问成功,否则,会报错404.

所以基于这种location优先级的配置,如果我写了location = / port=3000 这种模式下,后端的node会直接挂掉,也就是说会报404,页面无法访问。

因此上述的办法就没办法在nuxt框架上实现。。。

这时候就需要第二种解决方案:

当nginx匹配到404的时候,自动去旧官网上查询,如果查询到了,就返回结果。

配置如下

    location / {
        proxy_pass http://127.0.0.1:3000;
        add_header ‘Access-Control-Allow-Origin‘ ‘*‘;
        add_header ‘Access-Control-Allow-Credentials‘ ‘true‘;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;

        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        #新网站报错,跳转到老网站 2019.06.02
        error_page 404 = @old_niu;
    }
    #新网站报错,跳转到老网站 2019.06.02
    location @old_niu{
        proxy_redirect off;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_pass http://127.0.0.1:7100;
        #这里配置 老系统的错误页面

     }

  这样就可以先去新官网上匹配,然后如果报错404,就去旧官网,也算一种解决方案。

原文地址:https://www.cnblogs.com/howtobuildjenkins/p/10978875.html

时间: 2024-10-24 18:12:12

nginx配置同一域名下,共存2个nodejs项目的相关文章

nginx配置跨域访问

前端要在本地测试ajax接口,无法跨域访问,所以在测试环境的nginx配置了跨域支持,方法如下: 在nginx.conf文件, http块下配置 42 #support cross domain access 43 add_header Access-Control-Allow-Origin *; 44 add_header Access-Control-Allow-Headers X-Requested-With; 45 add_header Access-Control-Allow-Meth

nginx配置跨域、gzip加速、代理详细讲解

1.配置跨域 这个很简单,直接打开配置nginx.conf ,在http下配置下面三行代码:当然如果你是想某一个虚拟主机下跨域,那就在哪个server下面添加 add_header Access-Control-Allow-Origin *; add_header Access-Control-Allow-Headers X-Requested-With; add_header Access-Control-Allow-Methods GET,POST,OPTIONS; 2.配置gzip,压缩访

Nginx配置跨域请求 Access-Control-Allow-Origin *

当出现403跨域错误的时候 No 'Access-Control-Allow-Origin' header is present on the requested resource,需要给Nginx服务器配置响应的header参数: 一. 解决方案 只需要在Nginx的配置文件中配置以下参数: location / { add_header Access-Control-Allow-Origin *; add_header Access-Control-Allow-Methods 'GET, P

Nginx 配置跨域权限

今天设置静态资源服务器时发现 Font from origin 'http://start.fbzl.org' has been blocked from loading by Cross-Origin Resource Sharing policy: No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://lib.fbzl.org' is therefore not

nginx配置跨域

location / { if ($request_method = 'OPTIONS') {add_header 'Access-Control-Allow-Origin' '*' always;add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS' always;## Custom headers and headers various browsers *should* be OK with but aren't#add

nginx 配置https并自签名证书

2016-10-28 转载请注明出处:http://daodaoliang.com/ 作者: daodaoliang 版本: V1.0.1 邮箱: [email protected] 参考链接: 这里 和 这里 和 官方文档 1. 制作服务器证书 服务器CA私钥: openssl genrsa -des3 -out ca.key 2048 制作解密后的CA私钥(一般无此必要): openssl rsa -in ca.key -out ca_decrypted.key ca.crt CA根证书(公

nginx 反向代理apache服务器 配置java与PHP共存环境

listen 80; listen 443; ssl on; ssl_certificate /passport.crt; ssl_certificate_key /passport.key; ssl_session_timeout 5m; server_name localhost; index index.html index.htm index.php; root /www/; location ~ .*\.(php|php5)?$ { #fastcgi_pass unix:/tmp/ph

阿里云服务器ECS Apache、Nginx 配置支持跨域访问

问题描述 如何让 Apache.Nginx支持跨域访问. 处理办法 配置 Apache 跨域访问 步骤: 修改 httpd.conf. 把 LoadModule headers_module modules/mod_headers.so 前面的注释删除 修改  改为:  即: AllowOverride none Require all granted Header set Access-Control-Allow-Origin * 说明: 首先使用图形界面开启headers_module模块功

Nginx配置springboot-vue跨域

nginx-springboot-vue前后端分离跨域配置 引言 接着上篇--简单的springboot-vue前后端分离登录Session拦截的demo,其中跨域是通过springboot后端全局设置的,但是碰到了奇怪的问题,用了个不优雅的方式解决. 于是想到使用Nginx跨域应该就不会如此了. windows下载安装 http://nginx.org/ 下载稳定版,解压缩. 查看配置文件 /nginx-1.16.0/conf/nginx.conf : #gzip on; server { l