前端开发者必备的 nginx 知识
正向代理与反向代理
正向代理
为客户端服务,客户端可以通过正向代理访问它本身无法访问的服务器资源。
对客户端是透明的,对服务器端是非透明的,即服务器端并不知道自己收到的是来自代理的访问还是来自真实客户端的访问。 ##反向代理
指代理服务器接收 Internet 上的连接请求,然后将连接请求转发到内部网络上的服务器,并将从服务器上得到的结果返回到 Internet 上请求连接的客户端,此时代理服务器对外就表现为一个反向代理服务端。
反向代理对服务端是透明的,对我们是非透明的,即我们并不知道自己访问的是代理服务器,而服务器知道反向代理在为他服务。
基本配置 ##配置结构
nginx.conf
- events
- http
- upstream
- server
- location
- location
- …
- …
main:全局配置对全局生效
- events:配置影响 nginx 服务器或用户额网络连接
- http:可以嵌套多个 server,配置代理,缓存,日志定义等绝大多数功能和第三方模块的配置
- server:配置虚拟机相关参数,一个 http 中可以有多个 server
- location:配置请求的路由,以及各种页面的处理情况
- upstream:配置后端服务器具体地址,负载均衡配置不可或缺的部分
内置变量
变量名 | 功能 |
---|---|
\$host | 请求信息中的 Host,如果请求中没有 Host 行,则等于设置的服务器名 |
\$request_method | 客户端请求类型,如 GET、POST |
\$remote_addr | 客户端的 IP 地址 |
\$args | 请求中的参数 |
\$content_length | 请求头中的 Content-length 字段 |
\$http_user_agent | 客户端 agent 信息 |
\$http_cookie | 客户端 cookie 信息 |
\$remote_addr | 客户端的 IP 地址 |
\$remote_port | 客户端的端口 |
\$server_protocol | 请求使用的协议,如 HTTP/1.0、HTTP/1.1 |
\$server_addr | 服务器地址 |
\$server_name | 服务器名称 |
\$server_port | 服务器的端口号 |
解决跨域 ###原理
例如:
- 前端 server 的域名为:fe.server.com
- 后端服务器的域名为:dev.server.com
用 fe.server.com 访问后端服务器,会出现跨域。
启动一个 nginx 服务器,将 server_name 设为 fe.server.com,然后设置相应的 location 以拦截前端需要跨域的请求,最后将请求代理回 dev.server.com
电脑 ngix 安装目录下的 nginx.conf
1 | server { |
这样可以完美绕过浏览器的同源策略:fe.server.com 访问 nginx 的 fe.server.com 属于同源访问,而 nginx 对服务端转发的请求不会触发浏览器的同源策略。
请求过滤
根据状态码过滤
1 | error_page 500 502 503 504 /50x.html; |
根据 URL 名称过滤,精准匹配 URL,不匹配的 URL 全部重定向到主页
1 | location / { |
根据请求类型过滤
1 | if($request_method !~ ^(GET|POST|HEAD)$){ |
nginx 命令行
启动
1 | nginx |
关闭 nginx
1 | ps -ef|grep nginx |
重启
1 | nginx -s reload |