Fork me on GitHub

前端必备nginx知识

前端开发者必备的 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
2
3
4
5
6
7
8
9
10
11
12
13
server {
listen 8080;
server_name localhost;

#charset koi8-r;

#access_log logs/host.access.log main;

location / {
root html;
index index.html index.htm;
}
}

这样可以完美绕过浏览器的同源策略:fe.server.com 访问 nginx 的 fe.server.com 属于同源访问,而 nginx 对服务端转发的请求不会触发浏览器的同源策略。

请求过滤

根据状态码过滤

1
2
3
4
error_page   500 502 503 504  /50x.html;
location = /50x.html {
root /root/static/html;
}

根据 URL 名称过滤,精准匹配 URL,不匹配的 URL 全部重定向到主页

1
2
3
location / {
rewrite ^.*$ / index.html redirect
}

根据请求类型过滤

1
2
3
if($request_method !~ ^(GET|POST|HEAD)$){
return 403
}

nginx 命令行

启动

1
nginx

关闭 nginx

1
2
ps -ef|grep nginx
kill -QUIT 57192

常用命令
重启

1
nginx -s reload
-------------本文结束感谢阅读-------------