目录
nginx%E5%A6%82%E4%BD%95%E9%85%8D%E7%BD%AE%E9%AB%98%E5%B9%B6%E5%8F%91-toc" name="tableOfContents" style="margin-left:0px">一.nginx如何配置高并发
1.1配置思路
1.2配置
nginx%E4%B8%ADHTTP%E9%85%8D%E7%BD%AE-toc" name="tableOfContents" style="margin-left:0px">二.nginx中HTTP配置
1.http模块解释
2.server和location模块解释
3.server虚拟主机
3.1基于不同域名的虚拟主机
3.2基于不同IP 的 虚拟主机
1.给网卡添加ip地址
2. 修改配置文件 编辑编辑编辑
3.测试访问
3.3 基于不同端口的虚拟主机
4. location常见配置指令
1.root: 跟路径配置
1.实验:
2.alias:别名配置
1.实验
3.proxy_pass:反向代理
1.实验
nginx%20%E6%A8%A1%E5%9D%97%C2%A0-toc" name="tableOfContents" style="margin-left:0px">三.nginx 模块
1.如何开启或者关闭模块
nginx%E8%AE%BF%E9%97%AE%E7%8A%B6%E6%80%81%E7%BB%9F%E8%AE%A1%E6%A8%A1%E5%9D%97-toc" name="tableOfContents" style="margin-left:40px">2.nginx访问状态统计模块
3.网页用户认证模块
4. 基于客户端访问控制模块编辑
nginx%20%E6%94%AF%E6%8C%81https(ssl%E6%A8%A1%E5%9D%97)-toc" name="tableOfContents" style="margin-left:40px">5.配置nginx 支持https(ssl模块)
nginx%E5%A6%82%E4%BD%95%E9%85%8D%E7%BD%AE%E9%AB%98%E5%B9%B6%E5%8F%91" style="background-color:transparent">一.nginx如何配置高并发
1.1配置思路
1.设置worker进程的数量取决与cpu物理核心数的数量(或者参数为:atuo ,自动匹配核心cpu数)
2.接着使用 事件驱动的异步非阻塞模型,基于 I/O 多路复用(epoll
)
3.接着配置每个worker进程的连接数,也就是最大支持连接数量,总并发连接数如下。
总并发=worker_processes × worker_connections;
4.由于每个连接都要至少打开一个文件描述符,所以要配置每个worker进程可以打开的最大数量,
即 worker_rlimit_nofile ≥ worker_connections
。
5. 这只是软件程序支持高并发,但是linux系统不支持的话,也完成不了高并发。设置系统内核参数, 修改/etc/security/limits.conf文件,将一个进程能够打开文件的数量设置为最大值(这个最大值不能超过系统全局的文件描述符限制:/proc/sys/fs/file-max)。
1.2配置
vim /usr/local/nginx/conf/nginx_conf
重启服务: systemctl restart nginx
worker数量变成2个
单个worker进程同时最大打开文件数变成65535
修改本地每个进程可以同时打开的最大文件数:
临时:ulimit -n 数字 永久:vim /etc/security/limits.conf
ulimit -Sn # 查看软限制(当前用户)
ulimit -Hn # 查看硬限制(当前用户)
ulimit -a # 查看所有限制(当前用户)
注意:
nginx当Web服务器:支持最大并发数= worker_processes×worker_connections
nginx当代理服务器:支持最大并发数=worker_processes*worker_connections/2
原因:因为nginx既要维持和客户端的连接,又要维持和后端服务器的连接,因此处理一次连接要占用2个连接,
nginx%E4%B8%ADHTTP%E9%85%8D%E7%BD%AE" name="%E4%BA%8C.nginx%E4%B8%ADHTTP%E9%85%8D%E7%BD%AE">二.nginx中HTTP配置
1.http模块解释
注意:tcp_nodelay 必须在sedfile开启文件传输模式下才有效,防止网络阻塞
日志格式设定:
$remote_addr与$http_x_forwarded_for用以记录客户端的ip地址;
$remote_addr(记录web服务器最近的ip地址,$http_x_forwarded_for 则记录从开始到web服务器所有ip地址)
$remote_user:用来记录客户端用户名称;
$time_local: 用来记录访问时间与时区;
$request: 用来记录请求的url与http协议;
$status: 用来记录请求状态;成功是200,
$body_bytes_sent :记录发送给客户端文件主体内容大小;
$http_referer:用来记录从哪个页面链接访问过来的;
$http_user_agent:记录客户浏览器的相关信息;
通常web服务器放在反向代理的后面,这样就不能获取到客户的IP地址了,
通过$remote_add拿到的IP地址是反向代理服务器的iP地址。反向代理服务器在转发请求
的http头信息中,可以增加x_forwarded_for信息,用以记录原有客户端的IP地址和原来
客户端的请求的服务器地址。
2.server和location模块解释
注意:修改时间为本地中国时间便于分析日志
timedatectl
是 Linux 系统中用于管理系统时间和日期的工具
timedatectl set-timezone <时区名称>
将 Linux 系统的时区设置为 亚洲/上海(即 UTC+8,中国标准时间)
3.server虚拟主机
3.1基于不同域名的虚拟主机
1.为虚拟机提供域名解析:
echo "192.168.233.32 www.xy101.com www.xy102.com" >> /etc/hosts
2.为虚拟主机准备网页文档
mkdir -p /usr/local/nginx/html/xy101
mkdir -p /usr/local/nignx/html/xy102
echo "<h1>this is xy101 host</h1>" > /usr/local/nginx/html/xy101/index.html
echo "<h1>this is xy102 host</h1>" > /usr/local/nginx/html/xy101/index.html
3.在http模块编写server模块
server {listen 80;server_name www.xy101.com; #设置域名www.xy101.comcharset utf-8;access_log logs/www.xy101.access.log; #设置日志名location / {root /usr/local/nginx/html/xy101; #设置www.xy101.com 的工作目录index index.html index.php;}error_page 500 502 503 504 /50x.html;location = 50x.html{root html;}}server {listen 80;server_name www.xy102.com; #设置域名www.xy102.comcharset utf-8;access_log logs/www.xy102.access.log; location / {root /usr/local/nginx/html/xy102;index index.html index.php;}error_page 500 502 503 504 /50x.html;location = 50x.html{root html;}}
4.重启服务,访问测试
3.2基于不同IP 的 虚拟主机
1.给网卡添加ip地址
第一种方法使用ifconfig命令:
apt install net-toos - y
ifconfig ens33:1 192.168.233.33
第二种方法:使用ip 命令
ip addr add 192.168.233.34 dev ens33 label ens33:2
第三种:添加多个网卡每个ip对应一个ip地址
2. 修改配置文件 


3.测试访问
3.3 基于不同端口的虚拟主机
1.使用同一个IP地址但使用的端口不同:修改配置文件
2.测试访问
4. location常见配置指令
1.root: 跟路径配置
匹配规则:拿location匹配的到的root路径追加URI路径就是域名后面的路径
location / {
root /var/www/html
}
URL : http://192.168.233.31/index.html 实际文件路径:/var/www/html/index.html |
1.实验:
浏览器输入网址:http://192.168.233.31
当 输入http://192.168.233.31 实际:http://192.168.233.31/html/index.html
当 输入http://192.168.233.31/abc 实际:http://192.168.233.31/usr/share/nginx/html/abc
当 输入http://192.168.233.31/abc/123 实际:http://192.168.233.31/usr/share/nginx/html/abc/123
成功日志查看:http://192.168.233.31
错误日志中查看: http://192.168.233.31/abc
错误日志中查看: http://192.168.233.31/abc/123
错误日志中查看跟路径匹配
注意:location匹配顺寻,根据location 匹配优先最长路径,找到立即终止、如果用输入192.168.233.31/路径时,location匹配 / 路径配置,路径便是:192.168.233.31/var/www,由于用户没有指定文件,会默认打开index.htm文件
2.alias:别名配置
处理方式:alias路径 替换 location路径
1.实验
浏览器输入网址:http://192.168.233.31
当 输入http://192.168.233.31 实际:http://192.168.233.31/html/index.html
当 输入http://192.168.233.31/abc/html 实际:http://192.168.233.31/usr/share/nginx/html/html
当输入http://192.168.233.31/abc/123/html 实际:http://192.168.233.31/usr/share/nginx/html/html
3.proxy_pass:反向代理
需要2台服务器:第1台:192.168.233.31(编译安装) 第二台:192.168.233.32(apt安装)
第一台31服务器前期准备:
第二台服务器前期准备:
1.实验
实验目的:访问 31 服务器页面 跳转 32 服务器页面,给31 服务器配置反向代理实现
注意:apt 安装的nginx配置文件位置:
nginx%20%E6%A8%A1%E5%9D%97%C2%A0" name="%E4%B8%89.nginx%20%E6%A8%A1%E5%9D%97%C2%A0" style="background-color:transparent">三.nginx 模块
1.如何开启或者关闭模块
vim /opt/源码包名/autu/options
nginx%E8%AE%BF%E9%97%AE%E7%8A%B6%E6%80%81%E7%BB%9F%E8%AE%A1%E6%A8%A1%E5%9D%97" name="2.nginx%E8%AE%BF%E9%97%AE%E7%8A%B6%E6%80%81%E7%BB%9F%E8%AE%A1%E6%A8%A1%E5%9D%97" style="background-color:transparent">2.nginx访问状态统计模块
1 查看是否安装ngin访问状态统计模块 --with-http_stub_status_module
2.修改 nginx.conf 配置文件,指定访问位置并添加 stub_status 配置
3.重载配置后,使用浏览器或者 curl -Ls http://192.168.233.31/status
4.结合 awk与if 语句进行性能监控
模拟高并发工具包: ubuntu apt install apache2-utils
压测工具:ab -c 指定并发数 -t 60 持续时间 URL
3.网页用户认证模块
1.nginx中自带了网页用户认证模块不需要手动安装:http_auth_basic_module
2.生成用户密码认证文件
apt update
apt install -y apache2-utils
htpasswd -c /usr/local/nginx/userlist zhangsan
chown nginx /usr/local/nginx/userlist
chmod 400 /usr/local/nginx/userlist
注意:只有第一次创建usrlist文件时使用-c ,后面在加新的访问用户的时候不用加-c 选项,如果加了就会重新建立usrlist 文件,原先用户信息会被覆盖。
server {location / {......##添加认证配置##auth_basic "secret"; #设置密码提示框文字信息auth_basic_user_file /usr/local/nginx/userlist;}}
4. 基于客户端访问控制模块
1.访问控制( http_access_module)规则如下:
deny IP/IP 段:拒绝某个 IP 或 IP 段的客户端访问。
allow IP/IP 段:允许某个 IP 或 IP 段的客户端访问。
规则从上往下执行,如匹配则停止,不再往下匹配。
nginx%20%E6%94%AF%E6%8C%81https(ssl%E6%A8%A1%E5%9D%97)" name="%E2%80%8B%E7%BC%96%E8%BE%91%E2%80%8B%E7%BC%96%E8%BE%915.%E9%85%8D%E7%BD%AEnginx%20%E6%94%AF%E6%8C%81https(ssl%E6%A8%A1%E5%9D%97)" style="background-color:transparent">
5.配置nginx 支持https(ssl模块)
1.安装nginx时需要添加ssl模块 --with-http_ssl_module
2.使用命令工具生成证书