nginx反向代理

反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个反向代理服务器。

场景:比较穷的我只有一台服务器,但在上面扔了很多依赖nodejs的接口和乱七八糟的服务

server {
    listen 80;  
    server_name www.yoursite.com; 
    root /www/demo;
    location /api {
        proxy_pass http://127.0.0.1:8091;
    }
    location /nuxt {
        proxy_pass http://127.0.0.1:3333;
    }
}

listen 80
监听80端口

server_name
匹配url地址

root
托管静态网站可以设置静态文件路径

proxy_pass
访问 www.yoursite.com/api 会访问服务器的8091端口;
也可以设置成某个目录

反向代理还可以解决跨域(常用不常用就不清楚了...)
还有种跨域设置是可以写add_header,内网测试服务器上见过这样设置

server {
    listen 80;
    ....
    add_header 'Access-Control-Allow-Origin' $http_origin;
    add_header 'Access-Control-Allow-Credentials' true;
    add_header 'Access-Control-Allow-Methods' 'Get, POST, OPTIONS';
    ....
}

Access-Control-Allow-Origin
允许访问的URI

Access-Control-Allow-Credentials
允许浏览器读取response

Access-Control-Allow-Methods
允许使用的HTTP方法

顺便想到了之前配置react单页应用页面路由时候用的设置

server {
    listen 80;
    server_name site.com;
    index index.html index.htm index.php
    root /www/spa/dist;
    location / {
        try_files $uri $uri/ /index.html; # 这里!
    }
    location ~ .*\.(php|php5)?$ { 
        ... 
    }
}

try_files $uri $uri/ /index.html
比如请求 xxx/index
回到root目录里找名字叫index的文件,没有就找index/的目录,再没就用index.html;
资源类的会找相对应的文件 xxx.css xxx.js,但是页面请求的路径就会使用index.html,处理单页应用需要

另外location后面的正则规则开头:

  • = 表示精确匹配
  • ^~ 表示常规字符串开头
  • ~ 区分大小写
  • ~* 不区分大小写
  • !~ 区分大小写不匹配
  • !~* 不区分大小写不匹配
Comments
Write a Comment