【狂神说笔记】 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 访问 } } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· .NET10 - 预览版1新功能体验(一)