nginx 解决跨域前后端跨域问题

  1. nginx 启动与配置
  • 启动
    + nginx -s reload|reopen|stop|quit  #重新加载配置|重启|停止|退出 nginx
    
  • 配置
    nginx -t   #测试配置是否有语法错误
    
  1. rewrite指令
rewrite "用来匹配路径的正则" 重写后的路径 [指令];
 server {
        listen       2015; #监听2015端口,可以改成其他端口
        server_name  localhost; # 当前服务的域名


        location /api/v1 { #添加访问目录为/apis的代理配置
                rewrite  ^/(.*)$ /$1 break;
                proxy_pass   http://localhost:2016;
       }

   }

注释:

rewrite "^/api/(.*)$" /$1 break,路径重写:
  • “^/api/(.*)$”:匹配路径的正则表达式,用了分组语法,把/api/以后的所有部分当做1组
    /$1

  • 重写的目标路径,这里用$1引用前面正则表达式匹配到的分组(组编号从1开始),即/api/后面的所有。这样新的路径就是除去/api/以外的所有,就达到了去除/api前缀的目的

  • break:指令,常用的有2个,分别是:last、break

  • last:重写路径结束后,将得到的路径重新进行一次路径匹配

  • break:重写路径结束后,不再重新匹配路径。

server {
        listen       2015; #监听2015端口,可以改成其他端口
        server_name  localhost; # 当前服务的域名


        location /api/v1 { #添加访问目录为/apis的代理配置
            add_header Access-Control-Allow-Origin *;
            add_header Access-Control-Allow-Methods 'GET, POST,PUT,DELETE,OPTIONS';
            add_header Access-Control-Allow-Headers 'DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Authorization';

            if ($request_method = 'OPTIONS') {
                return 204;
            }
            if ($request_method = 'POST') {
                add_header Access-Control-Allow-Origin *;
            }
            if ($request_method = 'GET') {
                add_header Access-Control-Allow-Origin *;
            }
            if ($request_method = 'put') {
                add_header Access-Control-Allow-Origin *;
            }
            if ($request_method = 'DELETE') {
                add_header Access-Control-Allow-Origin *;
            }
            rewrite  ^/(.*)$ /$1 break;
            proxy_pass   http://localhost:2016;
       }
}

你可能感兴趣的:(环境准备)