nginx ¶
简介 ¶
基于C语言开发开源、高性能web服务器和反向代理服务器
反向代理:接受客户端请求,转发请求到真实服务器处理,将处理结果返回客户端

正向代理:访问外部资源时,通过代理服务器去访问
反向代理服务的时服务器,正向代理服务的是客户端
安装及基础命令 ¶
安装
bash
1tar -zxvf nginx-1.20.1.tar.gz
2cd nginx-1.20.1/
3
4# configure 报错时一般缺少一些库,根据提示安装即可
5# ubuntu : apt-get install libpcre3 libpcre3-dev zlib1g zlib1g-dev openssl libssl-dev make
6./configure --prefix=/usr/local/nginx --with-http_ssl_module
7
8# 编译,编译后的nginx文件在objs里
9make
10
11# 安装,将编译后的文件安装到系统(创建相关目录等)
12make install
13
14# 重新编译时用得上
15make clean #清除上一次make命令生成的文件启动
bash
1/usr/local/nginx/sbin/nginx #普通启动
2 /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf #通过配置文件启动
3ps -ef | grep nginx #查看nginx进程,master和worker两个进程(主进程/工作进程)关闭
bash
1kill -QUIT 进程id #优雅关闭,等待所有请求处理后关闭
2kill -TERM 进程id #快速关闭,直接杀死重启
bash
1/usr/local/nginx/sbin/nginx -s reload #杀死进程,然后重新启动其他命令
bash
1/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf -t #-t参数,启动时检查配置文件
2/usr/local/nginx/sbin/nginx -V #查看nginx版本号、编译器版本、参数配置默认目录
- /etc/nginx:nginx配置文件目录, 所有的nginx配置文件都在这里
- /etc/nginx/nginx.conf:nginx的主配置文件, 可以修改它来改变nginx的全局配置.
- /etc/nginx/sites-available:这个目录存储每一个网站的"server blocks", nginx通常不会使用这些配置, 除非它们被链接到sites-enabled目录. 一般所有的server block配置都在这个目录中设置, 然后软链接到别的目录
- /etc/nginx/sites-enabled:这个目录存储生效的"server blocks"配置. 通常, 这个配置都是链接到sites-available目录中的配置文件.
- /etc/nginx/snippets:这个目录主要可以包含在其它nginx配置文件中的配置片段, 重复的配置都可以重构为配置片段.
- /var/log/nginx/access.log:每一个访问请求都会默认记录在这个文件中, 除非你做了其它设置.
- /var/log/nginx/error.log:任何nginx的错误信息都会记录到这个文件中.
nginx配置文件 ¶
基础配置
ini
1#worker进程运行用户
2#user nobody;
3
4#work进程默认条数,通常为CPU数量两倍或等于CPU数量
5worker_processes 1;
6
7#配置全局错误日志及类型 [debug|info|notice|warn|error|crit],默认为 error
8#error_log logs/error.log error;
9
10#配置进程PID文件,存放进程
11#pid logs/nginx.pid;events配置
ini
1#配置工作模式和连接数
2events {
3 #一个work进程连接上限,nginx并发连接上线为worker_processes*worker_connections,上限为65535
4 worker_connections 1024;
5}http配置
ini
1#配置http服务器,利用它的反向代理实现负载均衡
2http {
3 #配置nginx支持可以支持的多媒体类型,/conf/mine.types下可以看见支持的文件
4 include mime.types;
5
6 #默认以流形式打开,未识别时
7 default_type application/octet-stream;
8
9 #配置asses.log日志格式及存放路径,main是变量名
10 #log_format main '$remote_addr - $remote_user [$time_local] "$request" '
11 # '$status $body_bytes_sent "$http_referer" '
12 # '"$http_user_agent" "$http_x_forwarded_for"';
13
14 #配置asses.log日志存放路径
15 #access_log logs/access.log main;
16
17 #开启高效文件传输模式
18 sendfile on;
19 #防止网络阻塞
20 #tcp_nopush on;
21
22 #长连接超时时间
23 keepalive_timeout 65;
24
25 #开启gzip压缩输出
26 #gzip on;
27
28 #虚拟主机,一个http配置可以有多个server,端口号和域名不能完全一致
29 server {
30 #端口号
31 listen 80;
32 #域名
33 server_name localhost;
34
35 #编码格式,默认为utf-8
36 #charset koi8-r;
37
38 #访问日志,访问这个server主机时输出日志
39 #access_log logs/host.access.log main;
40
41 #默认的匹配 / 处理,当访问中有 / 时(/ 根路径),匹配到该location处理
42 location / {
43 #本地磁盘的根路径
44 root html;
45 #默认欢迎页
46 index index.html index.htm;
47 }
48
49 #配置错误页
50 #error_page 404 /404.html;
51 # redirect server error pages to the static page /50x.html
52 #配置50x错误页面
53 error_page 500 502 503 504 /50x.html;
54
55 #精准匹配,
56 location = /50x.html {
57 root html;
58 }
59
60 # deny access to .htaccess files, if Apache's document root
61 # concurs with nginx's one
62 #
63 #location ~ /\.ht {
64 # deny all;
65 #}
66 }
67 #这里可以继续配置其他server虚拟主机
68}静态网站部署 ¶
修改配置文件,添加一个匹配,绑定根目录到自己的目录
ini1location / { 2 root /usr/share/nginx/html; 3 index index.html index.htm; 4} 5location /myweb { 6 root /home/html; 7 index index.html index.htm; 8}root指定的时/路径,所以需要在/home/html下创建myweb目录重启nginx:
nginx -s reload
负载均衡 ¶
原理图统一入口nginx

基本配置
location拦截 /myweb 请求,proxy_pass 然后转发到 upstream 中处理
ini
1upstream myweb {
2 server 192.168.115.128:8081;
3 server 192.168.115.128:8082;
4}
5server{
6 location /myweb {
7 proxy_pass http://myweb;
8 }
9}负载均衡策略
轮询(默认)
ini1#轮流发给每个服务器 2upstream myweb { 3 server 192.168.115.128:8081; 4 server 192.168.115.128:8082; 5}权重策略
ini1#按照权重,如下:3个请求,一个服务器处理2个,另个服务器处理1个 2upstream myweb { 3 server 192.168.115.128:8081 weight=2; 4 server 192.168.115.128:8082 weight=1; 5}ip hash
ini1#根据ip值hash,相同的ip总是访问同一个服务器,不会丢失session,但是不建议使用,可能存在所有请求在一个服务器 2upstream myweb { 3 ip_hash; 4 server 192.168.115.128:8081; 5 server 192.168.115.128:8082; 6}最少连接数
ini1#转发请求到处理请求最少的服务器 2upstream myweb { 3 least conn; 4 server 192.168.115.128:8081; 5 server 192.168.115.128:8082; 6}
其他配置
备份
ini1#在非backup服务器全部宕机时,请求转发到backup服务器,版本更新时可用 2upstream myweb { 3 server 192.168.115.128:8081; 4 server 192.168.115.128:8082 backup; 5}down
ini1#标记down的服务器不参与负载均衡 2upstream myweb { 3 server 192.168.115.128:8081; 4 server 192.168.115.128:8082 down; 5}
静态代理 ¶
静态资源由nginx处理,通过拦截静态资源的请求,进行相应的处理
实现方式一,在 location 中配置静态资源的后缀,拦截请求后缀名
ini
1location ~.*\.(js|css|htm|html|gif|jpg|jpeg|png|bmp|swf|ioc|rar|zip|txt|f;v|mid|doc|ppt|pdf|xlx|mp3|wma)$ {
2 root /opt/static;
3}实现方式二,在 location 中配置静态资源所在目录实现,拦截请求路径
ini
1location ~.*/(css|js|img|images) {
2 root /opt/static;
3}动静分离 ¶
整体架构图架构图

实现
nginx负载均衡服务器
ini1upstream myweb { 2 ip_hash; 3 server 192.168.115.128:8081; 4 server 192.168.115.128:8082; 5} 6upstream static { 7 server 192.168.115.128:81; 8 server 192.168.115.128:82; 9} 10server{ 11 location /myweb { 12 proxy_pass http://myweb; 13 } 14 location ~.*/(css|js|img|images) { 15 proxy_pass http://static; 16 } 17}配置存放静态资源的nginx服务器
ini1location ~.*/(css|js|img|images) { 2 root /opt/static; 3}
虚拟主机 ¶
基于端口(不重要)
ini
1server {
2 #端口号
3 listen 80;
4 #域名
5 server_name localhost;
6 location / {
7 root html;
8 index index.html index.htm;
9 }
10 error_page 500 502 503 504 /50x.html;
11 location = /50x.html {
12 root html;
13 }
14}
15server {
16 #端口号
17 listen 81;
18 #域名
19 server_name localhost;
20 location / {
21 root html;
22 index index.html index.htm;
23 }
24 error_page 500 502 503 504 /50x.html;
25 location = /50x.html {
26 root html;
27 }
28}基于域名(重要)
ini
1server {
2 #端口号
3 listen 80;
4 #域名
5 server_name www.myweb1.com;
6 location / {
7 root html;
8 index index.html index.htm;
9 }
10 error_page 500 502 503 504 /50x.html;
11 location = /50x.html {
12 root html;
13 }
14}
15server {
16 #端口号
17 listen 80;
18 #域名
19 server_name www.myweb2.com;
20 location / {
21 root html;
22 index index.html index.htm;
23 }
24 error_page 500 502 503 504 /50x.html;
25 location = /50x.html {
26 root html;
27 }
28}