简介
Nginx是一个开源的轻量级HTTP服务器,主要功能包括反向代理,负载均衡,HTTP服务器和争相代理。其具有占用内存少,并发能力强,可扩展性好等特点
运行架构
Nginx
采用多进程模型,由一个主进程和多个工作进程组成。这种设计不仅提高了系统的稳定性,还充分利用了多核
CPU 的性能。
master进程
- 启动时检查配置是否正确
- 根据配置文件创建并监控wroker进程
- 监听端口,接收http请求,并转发给worker进程响应请求
- 监听运维命令,并将命令转发给worker
worker进程
- 处理master进程接收的http请求
- worker进程数量根据又nginx.conf决定
- worker进程之间会进行竞争,获胜者处理请求
- 接收master进程发送来的命令
编译安装
依赖
1
| yum install pcre pcre-devel openssl openssl-devel zlib zlib-devel gzip
|
编译
1 2
| ./configure --prefix=/opt/nginx make && sudo make install
|
Nginx常用命令
nginx -t |
检测nginx.conf语法 |
nginx -s reload |
重新读取nginx.conf(master进程ID不变,worker改变) |
nginx -s stop |
停止Nginx |
Nginx配置说明
events{} |
nginx性能配置 |
http{} |
用户请求与响应整体功能 |
server{} |
用于响应具体某一个域名 |
location{} |
用于匹配网站具体URL |
mime.types
定义可以被Nginx识别处理的媒体文件类型,其他文件类型Nginx默认不解析,直接下载
虚拟主机
通过Nginx实现一台服务器同一个Nginx上运行多个网站
1 2 3 4 5 6 7 8
| server { listen 80; # 监听端口 server_name blog.way.com; # 匹配域名 location / { root /www/blog/; # 站点存放根目录(绝对路径) index index.html index.htm; # 主页文件 } }
|
反向代理
HTTP反向代理
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
| server { listen 80; # 监听端口 server_name blog.way.com; # 匹配域名 proxy_connect_timeout 180; #与后端建立连接超时时间 proxy_send_timeout 180; #向后端发送请求超时时间 proxy_read_timeout 180; #从后端读取响应超时时间 proxy_set_header Host $host #设置请求头信息(roxy_set_header 选项 内容) proxy_set_header X-Forwarder-For $remote_addr; #后端的Web服务器可以通过X-Forwarded-For获取用户真实IP location /api/ { proxy_pass http://baidu.com; } #静态文件,nginx自己处理 location ~ ^/(images|javascript|js|css|flash|media|static)/ { root /www/blog/; #过期30天,静态文件不怎么更新,过期可以设大一点,如果频繁更新,则可以设置得小一点。 expires 30d; }
#设定查看Nginx状态的地址 location /NginxStatus { stub_status on; access_log on; auth_basic "NginxStatus"; auth_basic_user_file conf/htpasswd; }
#禁止访问 .htxxx 文件 location ~ /\.ht { deny all; }
}
|
通过location下的proxy_pass参数设置代理目标服务器,同时会将接收到的uri中/api/后面的路径拼接到目标域名上
HTTPS反向代理
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| server { listen 80; # 监听端口 server_name blog.way.com; # 匹配域名 ssl_certificate cert.pem; #ssl证书文件位置(常见证书文件格式为:crt/pem) ssl_certificate_key cert.key; #ssl证书key位置
#ssl配置参数(选择性配置) ssl_session_cache shared:SSL:1m; ssl_session_timeout 5m; #数字签名,此处使用MD5 ssl_ciphers HIGH:!aNULL:!MD5; ssl_prefer_server_ciphers on; location / { root /root; #定义服务器的默认网站根目录位置 index index.html index.htm; #定义首页索引文件的名称 proxy_pass http://load_balance_server ;#请求转向load_balance_server 定义的服务器列表 } }
|
负载均衡
1 2 3 4 5 6 7 8 9 10 11 12 13
| upstream server{ server 192.168.122.101 weight=5; # weight为权重,越大优先级越高 server 192.168.122.102 weight=1;
} # 虚拟主机配置, 用于响应具体网站 server { listen 80; server_name master.com; location / { proxy_pass http://server; } }
|
负载均衡策略
轮询
不设置权重,默认所有服务器权重都为1
1 2 3 4 5
| upstream bck_testing_01 { # 默认所有服务器权重为 1 server 192.168.122.101 server 192.168.122.102 }
|
加权轮训
通过IP后面通过weight添加权重,权重越大优先级越高
1 2 3 4
| upstream bck_testing_01 { server 192.168.122.101 weight=1 server 192.168.122.102 weight=5 }
|
最少连接
优先将请求分配给活跃连接数最少的服务器
1 2 3 4 5
| upstream bck_testing_01 { least_conn; server 192.168.122.101 server 192.168.122.102 }
|
加权最少连接
结合权重和最少连接数,优先分配给(连接数/权重)最小的服务器
1 2 3 4 5
| upstream bck_testing_01 { least_conn; server 192.168.122.101 weight=1 server 192.168.122.102 weight=5 }
|
IP Hash
将请求IP地址计算为哈希值,将同一IP请求分配给同一服务器
1 2 3 4 5
| upstream bck_testing_01 { ip_hash; server 192.168.122.101 server 192.168.122.102 }
|