前言

Nginx (engine x) 是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP服务器。 在前端的开发过程中,经常会遇到一些跨域的问题,这时候可能就需要到配置nginx,做一个反向代理 既然nginx这么有用,让我们开始学习如何使用

开始

如何快速开始nginx的使用呢 在mac电脑上,可以通过brew快速安装 brew install nginx
在终端命令行中 nginx 就可以启动了,一个默认的nginx服务器

指令

nginx -t        // 检查配置是否正确
nginx -s reload // 重启nginx服务器
nginx -s stop   // 关闭nginx服务器

配置

默认配置文件的目录 /usr/local/etc/nginx
默认服务器目录 /usr/local/var/www

反向代理

日常开发过程中,会有遇到在localhost:8080域名下,跨域请求xxx.xxx.com下的接口 如果后端不做配置的话,
前端也可以通过反向代理,请求成功
打开 /usr/local/etc/nginx/nginx.conf文件
在http{}中增加 server{}模块
具体设置:

server{
    listen       80;
    server_name  servername.com;
    location / {
        proxy_pass localhost:8080
    }
    location /api {
        proxy_pass http://xxx.xxx.com
    }
}

这样访问 servername.com的时候,直接获取到localhost:8080的资源,当访问servername.com/api 下的接口的时候,会被代理转发到 htto://xxx.xxx.com,这样就解决了跨域问题

奇怪的“BUG”

server_name 配置问题 场景:

配置了nginx server ,监听了端口,设置好server_name 后,第一次访问这个server_name是生效的

再次修改这个server_name后,第二次设置的server_name不生效,且第一次设置的生效

假定第一次设置 test.com 第二次设置abc.com

修改配置后 test.com还生效,abc.com不生效

最后查了许多资料,发现是server_name的问题

因为修改location的配置的时候,这个配置是生效的,只是域名不匹配

最后得出解决办法是

配置一个新的server_name的时候

需要修改hosts文件

127.0.0.1 server_name

配置好了以后,发现访问server_name 有效