nginx

nginx 介绍

定义

Nginx是一款轻量级的HTTP服务器,采用事件驱动的异步非阻塞处理方式框架,这让其具有极好的IO性能,时常用于服务端的反向代理和负载均衡。

作用

  1. 解决跨域

  2. 请求过滤

  3. 配置gzip

  4. 负载均衡

  5. 静态资源服务器

正向代理和反向代理

本质上来说,正向代理和反向代理都是指 在client(客户端) 和 server(服务端) 架设层 proxy(代理),来实现某些功能或者解决某些问题。

何谓正向代理

正向代理就是客户端和代理服务器可以直接互相访问,属于一个局域网;正向代理是为我们(客户端)服务的,客户端可以根据正向代理访问到它本身无法访问到的服务器资源。

正向代理对我们是透明的,对服务端是非透明的(服务端都不知道请求来自谁),即服务端并不知道自己收到的是来自代理的访问还是来自真实客户端的访问。

何谓反向代理

反向代理,把请求代理到和自己属于同一个局域网下的内部服务器上;反向代理是为服务端服务的,反向代理可以帮助服务器接收来自客户端的请求,帮助服务器做请求转发,负载均衡等。

反向代理对服务端是透明的(跨域),对我们是非透明的(不知道服务端的真实地址),即我们并不知道自己访问的是代理服务器,而服务器知道反向代理在为他服务。

master-worker

Master进程

  • 读取并验证配置文件nginx.conf;管理worker进程;

Worker进程

  • 每一个Worker进程都维护一个线程(避免线程切换),处理连接和请求;注意Worker进程的个数由配置文件决定,一般和CPU个数相关(有利于进程切换),配置几个就有几个Worker进程。

热部署

  • 修改配置文件nginx.conf后,重新生成新的worker进程,当然会以新的配置进行处理请求,而且新的请求必须都交给新的worker进程,至于老的worker进程,等把那些以前的请求处理完毕后,kill掉即可

配置

mac 配置文件在 /usr/local/etc/nginx/nginx.conf

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
nginx.conf

#pid /nginx/pid/nginx.pid; #指定nginx进程运行文件存放地址
error_log log/error.log debug; #制定日志路径,级别。

events {
worker_connections 1024; #最大连接数
}

http {
include mime.types; #文件扩展名与文件类型映射表
default_type application/octet-stream; #默认文件类型,默认为text/plain
sendfile on; #允许sendfile方式传输文件,可在http,server,location块。
keepalive_timeout 65; #连接超时时间,默认为75s,可以在http,server,location块。
error_page 404 https://www.baidu.com; #错误页
server {
keepalive_requests 120; #单连接请求上限次数。
listen 4545; #监听端口
server_name 127.0.0.1; #监听地址
location ~*^.+$ { #请求的url过滤,正则匹配,~为区分大小写,~*为不区分大小写。
#root path; #根目录
#index vv.txt; #设置默认页
proxy_pass http://mysvr; #请求转向mysvr 定义的服务器列表
deny 127.0.0.1; #拒绝的ip
allow 172.18.5.54; #允许的ip
...
}
location path {
...
}
}
server {
...
}
}

注意:每个指令必须有分号结束

1、几个常见配置项:

1.$remote_addr 与 $http_x_forwarded_for 用以记录客户端的ip地址;

2.$remote_user :用来记录客户端用户名称;

3.$time_local : 用来记录访问时间与时区;

4.$request : 用来记录请求的url与http协议;

5.$status : 用来记录请求状态;成功是200;

6.$body_bytes_s ent :记录发送给客户端文件主体内容大小;

7.$http_referer :用来记录从那个页面链接访问过来的;

8.$http_user_agent :记录客户端浏览器的相关信息;

配置location

location 支持的语法 location [=|~|~*|^~|@] pattern { … }

= 要求路径完全匹配

1
location = /abc { }
  • http://domain.com/abc 匹配

  • http://domain.com/ABCD 可能匹配 ,系统是否大小写敏感

  • http://domain.com/abc?f=3 匹配,忽略 querystring

  • http://domain.com/abc/ 不匹配,带有结尾的/

  • ·http://domain.com/abcde· 不匹配

~ 区分大小写的正则匹配

~ 后面写正则规则即可

1
location ~ ^/abc$ { }

~* 不区分大小写的正则匹配

1
location ~* ^/abc$ { }

^~ 开头对URL路径进行前缀匹配,并且在正则之前

前缀匹配时,Nginx 不对 url 做编码,因此请求为 /static/20%/aa,可以被规则 ^~ /static/ /aa 匹配到(注意是空格)

1
location ^~ /uri {}

不带任何修饰符,也表示前缀匹配,但是在正则匹配之后

1
location /uri   {}

通用匹配

任何未匹配到其它location的请求都会匹配到,相当于switch中的default

1
location / {}

查找的顺序及优先级

当有多条 location 规则时,nginx 有一套比较复杂的规则

  • 精确匹配 =

  • 前缀匹配 ^~(立刻停止后续的正则搜索)

  • 按文件中顺序的正则匹配 ~或~*

  • 匹配不带任何修饰的前缀匹配

先精确匹配,没有则查找带有 ^~的前缀匹配,没有则进行正则匹配,最后才返回前缀匹配的结果(如果有的话)

nginx 命令

  1. nginx -h: 查看帮助

  2. nginx -c </path/to/config>: 为 Nginx 指定一个配置文件,来代替缺省的

  3. nginx -t: 不运行,而仅仅测试配置文件。nginx 将检查配置文件的语法的正确性,并尝试打开配置文件中所引用到的文件

  4. nginx -v: 显示 nginx 的版本

  5. nginx -V: 显示 nginx 的版本,编译器版本和配置参数

  6. nginx: 启动 nginx

  7. nginx -s stop || nginx -s quit: 强制停止Nginx服务 || 优雅地停止Nginx服务

  8. nginx -s reload: 重新加载Nginx配置文件,然后以优雅的方式重启Nginx

  9. nginx -c /usr/local/nginx/conf/nginx.conf: 指定配置文件

  10. ps aux | grep nginx || cat /path/to/nginx.pid: 获得 pid

  11. nginx -s reopen: 重启Nginx

  12. 从容停止 nginx,等所有请求结束后关闭服务

1
2
ps aux | grep nginx
kill -QUIT pid
  1. 快速停止命令,立刻关闭进程
1
2
ps aux | grep nginx
kill -TERM pid
  1. kill -9 pid: nginx 强制停止命令
返回
顶部