Ngin+Node 请求代理如何区分前端静态资源代理与接口请求代理,跨域如何解决适合?

如何使用Nginx反向代理请求能够将静态资源与接口请求区分开?

本人纯前端一名,在扩展后端知识,打算使用Node+Nginx试着走后端知识,因为Node的优势在于处理I/O,所以打算将静态资源交给Nginx来代理

    # 静态资源虚拟主机
    server {
        # 侦听8130端口
        listen       8130;
        #定义使用 www.redcoat.com访问
        server_name  www.redcoat.com;

        #charset koi8-r;
        root /Users/gi/Desktop/BandApp/WWW/www.redcoat.com/dist;
        # 设定本虚拟主机的访问日志
        #access_log  logs/host.access.log  main;

        # 默认请求
        location / {
            # 定义服务器的默认网站根目录位置
            root   /Users/gi/Desktop/BandApp/WWW/www.redcoat.com/dist;
            # 定义首页索引文件的名称
            index  index.html index.htm;
        }

        # 静态文件,nginx自己处理
        location ~ ^/(images|javascript|js|css|flash|media|static)/ {
            
            #过期30天,静态文件不怎么更新,过期可以设大一点,
            #如果频繁更新,则可以设置得小一点。
            expires 30d;
        }


        # 定义错误提示页面
        error_page  404              /404.html;

        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }

    }

疑问

  1. 先上代码,这是我在Nginx中的静态资源代理配置,代码也的确生效成功了但是如果我想请求的不是静态资源,而是后台的接口了?这样子配的话,岂不是我没加一个接口都要在这里配置一条路径匹配?(正确做法是怎样的?是像我写的下面那样解决吗?)
  2. 在未得到正确做法前,我思考了一下写前端时请求后台,我想到的是将后台的域名跟前台域名区分下,做一个子域名,这样前台请求接口就可以直接请求后台的域名接口,然后在Nginx中在代理下后台域名的请求,反向的Node应用中,可是这样做前端请求后端好像跨域了(之前以为子域名不会跨域),如果这样是正确的配置方法,那跨域问题后台怎么处理合适
# 服务器虚拟主机
    server {
        # 侦听80端口
        listen       8130;
        #定义使用 www.redcoat.com访问
        server_name  node.redcoat.com;

        #charset koi8-r;

        # 设定本虚拟主机的访问日志
        #access_log  logs/host.access.log  main;

        # 默认请求
        location / {
           proxy_set_header X-Real-IP $remote_addr;
           proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
           proxy_set_header Host $http_host;
           # proxy_set_header X-Nginx-Proxy true;
           proxy_set_header Connection "";
           # 代理目标的地址
           proxy_pass http://node.redcoat.com:8080;
        }



        # 定义错误提示页面
        error_page  404              /404.html;

        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
阅读 3.5k
2 个回答
     server {
        listen       80; 
        server_name  www.xxx.cn;
         // 服务器渲染
          location / {
            proxy_pass      http://127.0.0.1:7009;
            #proxy_set_header Host      $host;
            #proxy_set_header X-Real-IP $remote_addr;
          }
          # api
          location ~ ^/backer {
             proxy_pass http://api.xxx.cn;
             #proxy_set_header  X-Real-IP        $remote_addr;
             #proxy_set_header  X-Forwarded-For  $proxy_add_x_forwarded_for;
          }
         # socket
         location ~ ^/socket\.io {
           proxy_pass http://127.0.0.1:7010;
           proxy_http_version 1.1;
           proxy_set_header Upgrade $http_upgrade;
           proxy_set_header Connection "upgrade";
          }
          # static 资源
         location ~ ^/res(.*\.(js|css|jpg|png|ico|mp3)$) {    
              # rewrite ^/react/(.*) /$1 last;
              alias F:\web\git\vuessr\dist\$1;
         }
         
      }

可以把后端的请求都统一加上前缀,如 /api/

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题