Nginx|基础
NGINX
Nginx(发音同“engine X”)是异步框架的网页服务器,也可以用作反向代理、负载平衡器和HTTP缓存。
概念
正向代理
客户端主动使用代理服务器连接目标服务器
反向代理
客户端无感知,目标服务器使用代理,将请求分发,提高服务的并发性能
三板斧
- 反向代理
- 负载均衡
- 动静分离
配置
配置结构
-
全局配置块:配置影响nginx全局的指令。一般有运行nginx服务器的用户组,nginx进程pid存放路径,日志存放路径,配置文件引入,允许生成worker process数等
-
event配置块:配置影响nginx服务器或与用户的网络连接。有每个进程的最大连接数,选取哪种事件驱动模型处理连接请求,是否允许同时接受多个网路连接,开启多个网络连接序列化等
-
http配置块:可以嵌套多个server,配置代理,缓存,日志定义等绝大多数功能和第三方模块的配置
-
server配置块:配置虚拟主机的相关参数,一个http中可以有多个server
-
location配置块:配置请求的路由,以及各种页面的处理情况
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
... #全局块 events { #events块 ... } http #http块 { ... #http全局块 server #server块 { ... #server全局块 location [PATTERN] #location块 { ... } location [PATTERN] { ... } } server { ... } ... #http全局块 }
location
配置语法
location [ = | ~ | ~* | ^~ ] uri { ... }
location @name { ... }
配置注意
- location 是在 server 块中配置。
- 可以根据不同的 URI 使用不同的配置(location 中配置),来处理不同的请求。
- location 是有顺序的,会被第一个匹配的location 处理。
配置demo
-
=:精确匹配
1 2 3 4
location = / { #规则 } # 则匹配到 `http://www.example.com/` 这种请求。
-
~:大小写敏感
1 2 3 4 5 6
location ~ /Example/ { #规则 } #请求示例 #http://www.example.com/Example/ [成功] #http://www.example.com/example/ [失败]
-
~*:大小写忽略
1 2 3 4 5 6
location ~* /Example/ { #规则 } # 则会忽略 uri 部分的大小写 #http://www.example.com/Example/ [成功] #http://www.example.com/example/ [成功]
-
^~:只匹配以 uri 开头
1 2 3 4 5 6
location ^~ /img/ { #规则 } #以 /img/ 开头的请求,都会匹配上 #http://www.example.com/img/a.jpg [成功] #http://www.example.com/img/b.mp4 [成功]
-
@:nginx内部跳转
1 2 3 4 5 6 7 8
location /img/ { error_page 404 @img_err; } location @img_err { # 规则 } #以 /img/ 开头的请求,如果链接的状态为 404。则会匹配到 @img_err 这条规则上。
使用示例
-
反向代理
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
## Start www.redis.com.cn ## server { listen 80; server_name www.redis.com.cn; access_log logs/redis.access.log main; error_log logs/redis.error.log; root html; index index.html index.htm index.php; ## send request back to apache ## location / { proxy_pass http://apachephp; #Proxy Settings proxy_redirect off; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504; proxy_max_temp_file_size 0; proxy_connect_timeout 90; proxy_send_timeout 90; proxy_read_timeout 90; proxy_buffer_size 4k; proxy_buffers 4 32k; proxy_busy_buffers_size 64k; proxy_temp_file_write_size 64k; } } ## End www.redis.com.cn ##
-
负载均衡
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
# 把www.domain.com均衡到本机不同的端口,也可以改为均衡到不同的地址上。 http { upstream myproject { server 127.0.0.1:8000 weight=3; server 127.0.0.1:8001; server 127.0.0.1:8002; server 127.0.0.1:8003; } server { listen 80; server_name www.domain.com; location / { proxy_pass http://myproject; } } }
-
动静分离
1 2 3 4 5 6 7 8 9 10 11 12 13 14
server { listen 80; server_name 192.168.25.35; # 当接收到http请求时,首先host和这里的server_name进行匹配,如果匹配上,则走这个虚拟主机的location路由 # 静态资源则路由到这里 location /static/~(.*)(\.jpg|\.png|\.gif|\.jepg|\.css|\.js|\.css){ alias html; } # 其他的url则转发到 http://192.168.25.35:8080 location / { proxy_pass http://192.168.25.35:8080; } }