Nginx
Nginx
Nginx简介
web就是B/S架构
网络模型
select while循环一直询问访问需求
poll
epoll 在端口监控有需求立马相应
apache: select
Nginx :
windows 中 select
linux 中 epoll
官网:https://nginx.org/
软件:https://nginx.org/download/
-v : 打印版本号
[root@web01 ~]# nginx -v
nginx version: nginx/1.20.2
-V : 打印版本号和配置项
[root@web01 ~]# nginx -V
nginx version: nginx/1.20.2
built by gcc 4.8.5 20150623 (Red Hat 4.8.5-44) (GCC)
built with OpenSSL 1.0.2k-fips 26 Jan 2017
TLS SNI support enabled
configure arguments: --prefix=/etc/nginx
-t : 检查配置文件
[root@web01 ~]# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
-T : 测试配置文件并启动
-q :打印错误日志
-s : 操作进程
stop :停止
quit :退出
reopen :重启
reload :重载
-p : 指定nginx的工作目录
-e : 指定错误日志路径
-c : 指定配置文件的路径
-g : 设置一个全局的Nginx配置项
[root@web01 ~]# nginx -g 'daemon off;'
全局配置和模块配置
全局配置
user : 指定Nginx的启动用户
worker_processes : 定义Nginx的worker进程数
auto === CPU数量
error_log : 错误日志路径
pid : pid的存放文件路径
events : 模块配置
worker_connections :每一个worker进程最多同时接入多少个请求
use : 指定Nginx的网络模型
http : web服务的模块
include : 加载外部的配置项
default_type : 如果找不到文件的类型,则按照指定默认类型处理
log_format : 定义日志格式
log_format json '{"@timestamp":"$time_iso8601",' '"host":"$server_addr",' '"service":"nginxTest",' '"trace":"$upstream_http_ctx_transaction_id",' '"log":"log",' '"clientip":"$remote_addr",' '"remote_user":"$remote_user",' '"request":"$request",' '"http_user_agent":"$http_user_agent",' '"size":$body_bytes_sent,' '"responsetime":$request_time,' '"upstreamtime":"$upstream_response_time",' '"upstreamhost":"$upstream_addr",' '"http_host":"$host",' '"url":"$uri",' '"domain":"$host",' '"xff":"$http_x_forwarded_for",' '"referer":"$http_referer",' '"status":"$status"}'; access_log /var/log/nginx/access.log json ;
sendfile : 高效读取文件
keepalive_timeout : 长连接保持连接的
HTTP 1.0 短链接
HTTP 1.1 长连接
server : 网址模块
listen : 监听的端口
server_name : 定义域名
location : 访问路径
root : 指定网址路径
index : 指定网址的索引文件
Nginx部署
1.yum安装
[root@web01 ~]# vim /etc/yum.repos.d/nginx.repo
[nginx-stable] name=nginx stable repo baseurl=http://nginx.org/packages/centos/$releasever/$basearch/ gpgcheck=1 enabled=1 gpgkey=https://nginx.org/keys/nginx_signing.key module_hotfixes=true [nginx-mainline] name=nginx mainline repo baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/ gpgcheck=1 enabled=0 gpgkey=https://nginx.org/keys/nginx_signing.key module_hotfixes=true
[root@web01 ~]# yum install nginx -y
[root@web01 ~]# systemctl stop httpd
[root@web01 ~]# systemctl start nginx
详情见yum仓库
2.二进制安装
3.编译安装
[root@web01 ~]# wget https://nginx.org/download/nginx-1.20.2.tar.gz
[root@web01 ~]# tar -xf nginx-1.20.2.tar.gz
[root@web01 nginx-1.20.2]# ./configure
[root@web01 nginx-1.20.2]# make
[root@web01 nginx-1.20.2]# make install
部署游戏案例
1.上传代码
[root@web01 ~]# cd /opt/
[root@web01 opt]# mkdir Super_Marie
2.编辑配置文件
[root@web01 opt]# cd /etc/nginx/conf.d
[root@web01 conf.d]# vim /etc/nginx/conf.d/game.conf
server { listen 80; server_name game.test.com; location / { root /opt/Super_Marie; index index.html; } }
3.测试配置文件是否正常
[root@web01 conf.d]# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
4.重启Nginx
[root@web01 conf.d]# systemctl restart nginx
5.域名解析
C:\Windows\System32\drivers\etc\hosts
172.16.1.7 game.test.com
1.基于多IP的方式
[root@web01 conf.d]# cat game2.conf server { listen 80; server_name 192.168.15.7; location / { root /opt/Super_Marie; index index.html; } } server { listen 80; server_name 172.16.1.7; location / { root /opt/tank; index index.html; } }
2.基于多端口的方式
[root@web01 conf.d]# cat game3.conf server { listen 80; server_name 192.168.15.7; location / { root /opt/Super_Marie; index index.html; } } server { listen 81; server_name 192.168.15.7; location / { root /opt/tank; index index.html; } }
3.基于多域名的方式
[root@web01 conf.d]# cat game4.conf server { listen 80; server_name www.game.com; location / { root /opt/Super_Marie; index index.html; } } server { listen 80; server_name www.game1.com; location / { root /opt/tank; index index.html; } }
记录:
网站状态码是500的比例
网站的访问来源
网站排错
参数:
$remote_addr : 客户端IP
$http_x_forwarded_for : 真实的客户端IP(在反向代理中生效)
允许或者拒绝某些IP访问
deny : 拒绝
allow : 允许
案例1:允许192.168.15.1访问,不允许其他IP访问
allow 192.168.15.1;
deny all;
案例2:允许192.168.15.0这个网段访问,不允许其他网段访问
allow 192.168.15.0/24;
deny all;
案例3:只允许通过VPN来访问
allow 172.16.1.81;
deny all;
访问之前需要登录
1、安装httpd-tools
[root@web01 ~]# yum install httpd-tools -y
2、生成用户名密码文件
[root@web01 ~]# htpasswd -c /etc/nginx/auth chenyang
New password:
Re-type new password:
Adding password for user chenyang
3、将文件路径加入Nginx配置
[root@web01 ~]# vim /etc/nginx/conf.d/game4.conf
auth_basic "Welcome To Login";
auth_basic_user_file /etc/nginx/auth;
4、重启Nginx
[root@web01 ~]# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
[root@web01 ~]# systemctl restart nginx
展示目录索引
autoindex on;
autoindex_exact_size on;
autoindex_localtime on;
autoindex_format json;
ngx_http_stub_status_module
监控Nginx运行状态
[root@web01 conf.d]# cat game5.conf server { listen 80; server_name 192.168.15.7; location / { stub_status; } }
ngx_http_limit_conn_module
控制Nginx连接数
1.安装ab测试命令
yum install httpd-tools -y
2.ab 参数
-n : 总共需要访问多少次
-c : 每次访问多少个
[root@web01 conf.d]# cat game5.conf # limit_req_zone $remote_addr zone=one:10m rate=1r/s; limit_conn_zone $remote_addr zone=addr:10m; server { listen 80; server_name 192.168.15.7; # limit_req zone=one burst=5; limit_conn addr 1; location / { root /opt/Super_Marie; index index.html; } }
ngx_http_limit_req_module
控制Nginx访问量
1.连接池
limit_req_zone $remote_addr zone=one:10m rate=1r/s;
声明连接池 变量 名称 连接池的大小 速率
2.限制数
案例1:要求每秒只能有一个访问
[root@web01 conf.d]# cat game5.conf limit_req_zone $remote_addr zone=one:10m rate=1r/s; server { listen 80; server_name 192.168.15.7; limit_req zone=one burst=5; location / { root /opt/Super_Marie; index index.html; } }
END