Nginx简介
Nginx是一款轻量级的Web服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器。协议下发行。特点占用内存少,并发能力强,使用nginx的网站有腾讯、淘宝、百度、京东、新浪、网易等。
nginx作用
1、反向代理
正向代理,用户A不能访问谷歌,浏览器配置代理服务器,然后通过访问代理服务器,让代理服务器获取内容并返回用户A。
反向代理,用户A发送请求给反向代理服务器,反向代理转交请求,并将获得的内容返回给客户端。反向代理客户端不需要任何配置。
2、负载均衡
负载均衡,分摊到多个操作单元上进行执行。
3、动静分离
静态页面与动态页面部署到不同服务器上
检查安装与启动停止
进入/usr/local/nginx/sbin/目录
./nginx -v // 查看版本
./nginx // 启动
./nginx -s stop // 停止
./nginx -s reload // 重启
配置systemctl后的管理方式
systemctl start nginx
systemctl stop nginx
systemctl restart nginx
systemctl status nginx
配置systemctl
1、创建一个nginx.service并添加执行权限
vim /usr/lib/systemd/system/nginx.service
chmod +x /usr/lib/systemd/system/nginx.service
2、添加内容
注释不能加,要去掉,否则报错 [Unit] # 对服务的说明 Description=nginx - high performance web server # 描述服务 After=network.target remote-fs.target nss-lookup.target # 描述服务类别 [Service] # 服务的一些具体运行参数的设置 Type=forking # 后台运行的形式 PIDFile=/usr/local/nginx/logs/nginx.pid # PID文件的路径 ExecStartPre=/usr/local/nginx/sbin/nginx -t -c /usr/local/nginx/conf/nginx.conf # 启动准备 ExecStart=/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf # 启动命令 ExecReload=/usr/local/nginx/sbin/nginx -s reload # 重启命令 ExecStop=/usr/local/nginx/sbin/nginx -s stop # 停止命令 PrivateTmp=true # 给服务分配临时空间 [Install] WantedBy=multi-user.target
3、重载systemctl命令
systemctl daemon-reload
systemctl start nginx.service
nginx配置文件解释
# 用户
#user nobody;
# processes [ˈprəʊsesɪz] 进程
worker_processes 1; # 此项配置表示可以处理的并发数量;设置值和CPU核心数一致
# 日志位置和日志级别
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid logs/nginx.pid;
events {
worker_connections 1024; # 支持的最大连接数,客户端到nginx的连接可以有多少个
}
Nginx原理分析
Nginx启动后有多进程,包括一个master进程,多个worker进程。
worker进程个数是根据服务器CPU核数来决定的。如4核心配置为worker_processes 4。如果设置少了,cpu的性能不能得到发挥。设置多了,频繁切换上下文带来损耗。
多个worker使用竞争机制从master获取任务。
worker_connections 1024,表示每个worcker支持的最大连接数。
因此,一个nginx能建立的最大连接数是 worker_processes * worker_connections,worker_connections默认是1024,当然,这是最大连接数。如果http请求本地资源,支持的最大并发量就是worker_processes * worker_connections;如果是http1.1,每次访问占用两个连接,支持的最大并发量就是worker_processes * worker_connections/2。如果使用反向代理,http1.1,每个请求过来,nginx服务器会与浏览器和后端服务器分别建立两个连接,支持的最大并发量就是worker_processes * worker_connections/4。
master、worker机制优点:
1、可以使用 nginx -s reload热部署
master进程在接到指令后,重新加载配置文件,再启动新的worker进程,新worker开接收新请求;同时master向所有老worker进程发送信号,告诉他们,不再接收新请求,如果有未处理完的请求处理完成后再退出。
2、每个worker都是独立的进程,一个worker出现故障,其他worker继续工作,不会造成服务中断。
location 规则说明
location / {
proxy_pass http://192.168.0.105:9003;
}
location用于匹配url,语法如下:
location [ = | ~ | ~* | ^~ ] url {
}
~ 正则匹配,区分大小写
~* 正则匹配,不区分大小写
= 不使用正则匹配,字符中必须是严格的url
反向代理
示例一,反向代理单机服务器:
server { # listen和servr_name配置的是nginx对外暴露的ip和端口号 # server_name的配置不可以加http://前缀,否则启动报错 listen 80; server_name 192.168.0.105; # 下面是转发给tomcat的ip和端口号 # proxy_pass的配置可以加http:前缀,末尾不要忘了冒号 location / { proxy_pass http://192.168.0.105:9003; } }
示例二,反向代理多台服务器:
有两台tomcat,一台tomcat的webapps里有项目first,first目录下有WEB-INF、index.jsp等;另一台tomcat的webapps里有项目second,second目录下也有WEB-INF、index.jsp等;
server { listen 80; server_name 192.168.0.105; location ~ /first/ { proxy_pass http://192.168.0.105:9000; } location ~ /second/ { proxy_pass http://192.168.0.105:9001; } }
浏览器访问:192.168.0.105/first 192.168.0.105/second
负载均衡(默认轮询)
upstream myserver { server 192.168.0.105:9000; server 192.168.0.105:9001; server 192.168.0.105:9003; } server { listen 80; server_name 192.168.0.105; location / { proxy_pass http://myserver; root html; index index.html index.htm; } }
负载均衡策略
轮询,每个请求按照时间顺序分配到不同的服务器,如果后端服务器down掉,就自动剔除了。
权重,用于性能不均,哪个服务器分配的多些,weight=3
ip绑定,每个请求按照ip的hash结果分配,一个访客一个固定后端服务器,解决session缓存的问题
动静分离
通过设置 expires 参数,可以使浏览器在过期时间内缓存页面,浏览器发送请求,服务器对比该文件最后更新时间,文件没有更新,返回给浏览器304,浏览器从缓存里返回用户;有改变,服务器返回内容。
经常更新的页面不建议使用;
server { listen 80; server_name 192.168.0.105; location /images/ { autoindex on; root /data/; } location /www/ { root /data/; } }
文件服务器目录:
/data/images/1.jpg
/data/www/1.txt
浏览器访问:http://192.168.0.105/images/1.jpg http://192.168.0.105/www/1.txt