初学nginx
一、相关概念
1、nginx
一个高性能的HTTP和反向代理服务器,特点是内存少、并发能力强;能支持高达50000个并发连接数。常用于正/反向代理、负载均衡、动静分离。
2、反向代理
正向代理:客户端配置代理服务器,通过代理服务器进行互联网访问。
反向代理:客户端无需做配置,只需要将请求发送给反向代理服务器,由反向代理服务转发到目标服务器。暴露的是反向代理服务器地址,隐藏了目标服务器IP地址。
3、负载均衡
单个服务器解决不了高并发量请求,可以增加服务器数量,然后将请求分发到各个服务器上(负载分发到不同的服务器)。
4、动静分离
为了加快网站的解析速度,把静态资源(HTML/CSS/JS)和动态资源(JSP、Serlet)分开部署到专门的服务器上,由不同的服务器去解析对应的资源,降低单台服务器的压力。
二、Linux下安装nginx
1、安装
https://www.cnblogs.com/boonya/p/7907999.html
2、nginx常用命令
在/user/local/nginx/sbin下输入命令
1、查看版本号:./nginx-v
2、查看进程:ps -ef|grep nginx
3、启动:./nginx
4、停止:./nginx -s stop
5、重启:./nginx -s reload
3、常用命令补充
1、查看开放的端口:firewall-cmd --list-all
2、添加对外开放的端口:firewall-cmd --add-port=8080/tcp --permanent
3、重启防火墙:firewall-cmd --reload
三、nginx配置文件
/usr/local/nginx/conf下的 nginx.conf
#user nobody;
worker_processes 1;
#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;
}
http {
include 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 logs/access.log main;
sendfile on;
#tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65;
#gzip on;
server {
listen 80;
#server_name localhost;
#测试代理 一个域名 www.billsys.com
server_name www.smbms.com;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
#测试代理 本地
proxy_pass http://127.0.0.1:8080;
root html;
index index.html index.htm;
}
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
# proxy the PHP scripts to Apache listening on 127.0.0.1:80
#
#location ~ \.php$ {
# proxy_pass http://127.0.0.1;
#}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
#location ~ \.php$ {
# root html;
# fastcgi_pass 127.0.0.1:9000;
# fastcgi_index index.php;
# fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
# include fastcgi_params;
#}
...........................................等
第一部分:全局块
从配置文件开始到events块之间的内容,主要设置一些影响nginx服务器整体运行的配置指令。
比如:worker_processes 1; --代表支持的并发处理量
第二部分:events块
涉及的指令主要影响nginx服务器与用户的网络连接
比如: worker_connections 1024; --支持最大的连接数
第三部分:http块
最常用的配置,代理、缓存和日志定义等大多数功能和第三方模块的配置。http块也包括http全局块、server块。
1、http全局块
配置的指令包括文件引入、MIME-TYPE定义、日志自定义、连接超时时间、单链接请求数上限等。
2、server全局块
和虚拟主机有密切关系,最常见的配置是本虚拟机主机的监听配置和本虚拟机主机的名称或IP配置。每个http块可以包含多个server块,而每个server块就相当于一个虚拟主机;每个server块也分为全局server块,以及可以同时包含多个location块。
3、location块
基于nginx服务器接收到的请求字符串,对虚拟主机名称/IP别名之外的字符串进行匹配,对特定的请求进行处理;地址定向、数据缓存和应答控制等功能,还有许多第三方模块的配置。
四、nginx配置实例
1、反向代理
1、安装一个tomcat,启动后测试访问
2、在nginx进行请求转发的配置
3、浏览器访问域名 www.testNginxTomcat.com 映射到nginx的ip地址,再反向代理至tomcat启动页面地址
4、location匹配规则参考
https://www.cnblogs.com/nishiwoerzi/articles/16337169.html
https://blog.csdn.net/shuxiaohua/article/details/124560311
注意location的匹配影响到代理地址的写法
报错:
5、配置location根据url反向代理不同的服务
2、负载均衡
1、固定访问的ip地址路径,轮询(默认)请求到多台服务器。
配置如下:
2、nginx分配服务器策略
①轮询(默认):按照时间顺序逐一分配,如果服务器down掉,能自动剔除。
②weight:代表权重,默认为1,权重越高被分配的客户端越多。
③ip_hash:每个请求按访问的ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session问题
④fair:按照服务器响应时间来分配,响应时间短优先分配。
3、动静分离
静态资源存放目录:
配置:
配置了autoindex on的效果
4、高可用
1、问题:nginx宕机
2、高可用(主从模式)
当主服务器挂掉,自动切换到备服务器
keepalived软件:类似于路由,通过脚本检测当前服务器是否可用,
3、准备工作
<1>准备2台服务器,分别安装nginx
<2>在2台服务器上安装keepalived
yum命令安装:yum install keepalived -y
查询安转的软件:rpm -q -a keepalived
默认安转的位置:cd /etc/keepalived/ 配置文件:keepalived.conf
4、高可用配置(主从配置)
主要是修改keepalived.conf的配置
主:https://blog.csdn.net/chuanchengdabing/article/details/119727185
辅:https://blog.csdn.net/m0_38004228/article/details/128338177
state MASTER # 主机 BACKUP # 从机
5、配置说明
网卡需根据服务器的进行修改;主从服务器的priority优先级不同,主大从小
https://blog.csdn.net/kang50055/article/details/124436702
第一部分:global_defs{} - 全局配置
router_id 为服务器的name 通过这个能访问到主机
第二部分:vrrp_script check_nginx{} - 检测脚本配置
第三部分:vrrp_instance VI_1{} -配置虚拟路由器
6、测试
启动nginx
启动keepalived:systemctl start keepalived.service
查看进程:ps -ef|grep keepalived
访问虚拟ip,访问的是主服务器,将主服务器的nginx停止后,访问的是从服务器
五、nginx的原理解析
1、master与worker进程:nginx工作流程
master是管理者,worker是实际工作者,worker根据争抢的方获取客户端的任务。
2、一个master和多个worker的好处
<1>可以使用nginx -s reload热部署,利用nginx进行热部署操作;master进程(热部署修改了东西)重新加载不影响正在工作的worker进程;未工作的worker进程重新加载,有新的任务进来时,重新加载的worker进程进行争抢,未重新加载的正在工作的worker进程不进程争抢,直到工作完成才重新进行加载该worker进程。
<2>每个worker是独立的进程,如果其中一个出现问题,其他worker继续进行争抢任务,实现请求过程不会造成服务中断。
3、设置多少worker数
worker数与服务器的cpu数相等是最合适的
4、连接数worker_connection
发送一个请求,占用worker2个或者4个连接数
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?