【狂神说笔记】 Nginx入门
1、简介
1.1、引入
简单的web项目中只需要一个tomcat部署在服务器上即可,但是当并发量增多,一台服务器满足不了需求了。
这个时候横向扩展,增加服务器,一个项目启动在不同的服务器上,而用户要访问这些服务器,如果直接访问session等的问题就会乱套,所以我们迫切需要一个代理服务器。
这个代理服务器可以帮助我们接受用户请求,然后按照用户请求规则转发到不同的服务器节点上,这个过程用户是无感知的。我们还希望它可以按照服务器的性能提供不同的权重选中,即负载均衡,所以我们选中了Nginx。
1.2、Nginx介绍
Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务。Nginx是由伊戈尔·赛索耶夫为俄罗斯访问量第二的Rambler.ru站点(俄文:Рамблер)开发的,公开版本1.19.6发布于2020年12月15日
其特点展用内存少,并发能力强,官方测试数据能够支持50000个并发连接数的响应。
国内使用它的有很多,例如百度,新浪,京东,网易,淘宝等
2、Nginx作用
2.1、反向代理
首先什么是正向代理:
例如VPN,安装在客户端,接受服务器的数据转发给客户端
而反向代理就是代理服务器端的,例如百度其实有很多服务器的,有时候访问出现卡断会自动切换服务器
2.2、负载均衡
- Nginx提供的负载均衡策略有两种:内置策略和扩展策略。内置策略为轮询,加权轮询,iphash。扩展策略即天马行空
轮询:请求依次挨个服务器发送
加权轮询:性能更强的服务器会接受更多的请求
iphash:对客户端请求的ip进行hash操作,然后根据hash结果将同一个客户端的ip发送到同一台服务器处理,解决session不共享问题(这种方式也有问题,一般用Redis实现session共享)
动静分离:不需要后台处理的静态文件和动态资源按照一定规则拆分,根据静态资源的特点将其进行缓存操作。提高资源响应的速度。
3、Nginx安装部署
这里以linux为例:
1、添加yum源
rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
2、安装Nginx
yum install -y nginx
(nginx安装位置为/etc/nginx)
3、启动Nginx并设置开机自动运行
systemctl start nginx.service
systemctl enable nginx.service
4、Nginx参数配置和命令
4.1、命令
#启动nginx
cd nginx安装目录
./nginx
# 停止
nginx -s stop
# 安全退出
nginx -s quit
# 修改配置时的重启命令
service nginx reload 或者
nginx -s reload
# 查看nginx进程
ps aux | grep nginx
如果nginx访问不了,要排除防火墙的问题,如果是阿里云服务器这种还要排除安全组的问题
4.2、参数配置
这里拿某项目的配置文件举例
#全局配置
user root; #使用用户
worker_processes auto;
error_log /var/log/nginx/error.log notice;
pid /var/run/nginx.pid;
events {
worker_connections 1024; #并发数
}
#http配置
http {
#静态资源文件配置
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
#tcp_nopush on;
keepalive_timeout 65;
#gzip on;
#代理配置
server {
listen 80;
server_name XXX.XXX.com;
rewrite ^(.*)$ https://$host$1 permanent;
}
upstream xx {
//负载均衡配置
}
}
5、Nginx实战
这里简单记录一下狂神老师的搭建记录:
首先前提是有两个服务器,然后通过nginx实现反向代理
http {
#http 配置(http默认端口80; https默认端口443;)
upstream kuangstudy { #反向代理地址:http://tangguo
# 负载均衡配置
#服务器 服务器ip:端口 权重(1,2,3...)
server 127.0.0.1:8080 weight=1;
server 127.0.0.1:8081 weight=1;
}
server {
listen 80; #端口配置
server_name localhost;
location / { #根路径 访问
root html;
index index.html index.htm;
proxy_pass http://kuangstudy; #反向代理
}
location /admin { #根路径下的/admin 访问
}
}
}