一、安装nginx
安装方式:
第一种: 基于官网仓库的安装方式,版本较新,配置易读
第二种: 使用默认的仓库安装,版本较低,配置不易读
[root@web01 ~]# nginx -v
nginx version: nginx/1.21.5
第三种: 编译方式安装,需要其他功能模块的时候 自定义安装
1.基于官网仓库的安装方式,版本较新,配置易读
windows访问游戏站点
第一步: hosts解析
10.0.0.7 www.oldboy.com
第二步: 测试是否解析成功
windows->cmd
ping www.oldboy.com
第三步: 浏览器访问www.oldboy.com
日志文件:
/var/log/nginx/access.log
/var/log/nginx/error.log1.配置nginx官网仓库
[root@nfs ~]#vim /etc/yum.repos.d/nginx.repo
[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/7/$basearch/
gpgcheck=0
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true
2.安装nginx
[root@nfs ~]#yum -y install nginx
[root@nfs ~]#nginx -v
nginx version: nginx/1.26.1
3.配置nginx
[root@nfs ~]#vim /etc/nginx/nginx.conf
#核心区域
user nginx; # 运行nginx的用户 安装nginx自动创建此用户
worker_processes auto; # nginx启动进程数量 以核心为准
error_log /var/log/nginx/error.log notice; # 错误日志的位置
pid /var/run/nginx.pid; # nginx的pid号写入到此文件中
#事件模块
events {
worker_connections 25532;# 每个进程最大的连接数
}
# 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; # 长连接 65秒自动和浏览器断开
#gzip on; # 是否资源压缩
include /etc/nginx/conf.d/*.conf;# 将conf.d下的*.conf引入到当前的文件
}
server区块,网站的配置。server区块是包含在http区块中。
[root@nfs conf.d]# cat default.conf
server {
listen 80; # 监听的端口
server_name www.oldboy.com; # 自己购买的域名 hosts解析
location / { # 路径匹配 www.oldboy.com/
root /code; # 让用户去/code目录获取网站信息
index index.html; # 默认给浏览器返回的文件 index.html
}
}
4.创建代码目录
[root@nfs ~]#mkdir /code
上传游戏代码到/code目录并且解压
[root@nfs /code]#ll renzhegame.tar.gz
-rw-r--r-- 1 root root 1904843 Dec 6 11:33 renzhegame.tar.gz
[root@nfs /code]#tar xf renzhegame.tar.gz
5.检查nginx配置文件
[root@nfs /code]#nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
6.启动nginx服务
[root@nfs /code]#systemctl start nginx
[root@nfs /code]#netstat -lnutp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:80 0.0.0.0:*
windows访问游戏站点
第一步: hosts解析
10.0.0.7 www.oldboy.com
第二步: 测试是否解析成功
windows->cmd
ping www.oldboy.com
第三步: 浏览器访问www.oldboy.com
日志文件:
/var/log/nginx/access.log
/var/log/nginx/error.log
配置Nginx多业务
基于多IP地址 了解
10.0.0.7----------->忍者
10.0.0.8----------->小霸王
1.配置一个ip地址
[root@web01 ~]# ip add add 10.0.0.8/24 dev ens33
2.配置文件修改为 10.0.0.7对应的是忍者业务
[root@web01 conf.d]# cat default.conf
server {
listen 10.0.0.7:80; # 监听的端口
server_name _; # 自己购买的域名 hosts解析
location / { # 路径匹配 www.oldboy.com/
root /code; # 让用户去/code目录获取网站信息
index index.html; # 默认给浏览器返回的文件 index.html
}
}
[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
[root@web01 conf.d]# systemctl restart nginx
3.检查当前的监听端口
[root@web01 conf.d]# netstat -tnulp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 10.0.0.7:80 0.0.0.0:* LISTEN 32133/nginx: master
增加小霸王业务 通过10.0.0.8IP访问
1.增加server配置
[root@web01 conf.d]# cat game.conf
server {
listen 10.0.0.8:80;
server_name _;
location / {
root /game;
index index.html;
}
}
2.创建代码目录
[root@web01 conf.d]# mkdir /game
[root@web01 conf.d]# cd /game/
3.上传小霸王游戏包
[root@web01 game]# ll
total 7708
-rw-r--r-- 1 root root 7890373 Dec 6 11:34 game.zip
[root@web01 game]# unzip game.zip
4.检测配置文件
[root@web01 game]# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
5.重启nginx
[root@web01 game]# systemctl restart nginx
浏览器访问: 10.0.0.7--->忍者
10.0.0.8--->小霸王
[root@web01 game]# netstat -tnulp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 10.0.0.8:80 0.0.0.0:* LISTEN 32233/nginx: master
tcp 0 0 10.0.0.7:80 0.0.0.0:* LISTEN 32233/nginx: master
为什么基于IP的用的少? 因为现在的带宽大部分都是BGP多线路。而不是单线
基于多端口 常用 80是给用户用的,自己的业务的后台不能让用户访问。自定义后台的端口
10.0.0.7:80------>忍者
10.0.0.7:81------>小霸王
忍者配置文件
[root@web01 conf.d]# cat default.conf
server {
listen 80; # 监听的端口
server_name _; # 自己购买的域名 hosts解析
location / { # 路径匹配 www.oldboy.com/
root /code; # 让用户去/code目录获取网站信息
index index.html; # 默认给浏览器返回的文件 index.html
}
}
小霸王配置文件
[root@web01 conf.d]# cat game.conf
server {
listen 81;
server_name _;
location / {
root /game;
index index.html;
}
}
[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
[root@web01 conf.d]# systemctl restart nginx
访问测试:
10.0.0.7:80
10.0.0.7:81
基于多域名 常用
www.oldboy.com-------->忍者
www.game.com-------->小霸王
配置忍者业务
[root@web01 conf.d]# cat default.conf
server {
listen 80; # 监听的端口
server_name www.oldboy.com; # 自己购买的域名 hosts解析
location / { # 路径匹配 www.oldboy.com/
root /code; # 让用户去/code目录获取网站信息
index index.html; # 默认给浏览器返回的文件 index.html
}
}
配置小霸王游戏业务
[root@web01 conf.d]# cat game.conf
server {
listen 80;
server_name www.game.com;
location / {
root /game;
index index.html;
}
}
[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
[root@web01 conf.d]# systemctl restart nginx
测试访问:
www.oldboy.com 对应的忍者
www.game.com 对应的小霸王 植物大战僵尸
重点:
安装nginx服务 通过官网仓库
nginx.conf 配置文件
server.conf server区块 网站
基于多IP地址 练习一遍
基于多端口 重点
基于多域名 重点
周末: rsync+nfs+lsync
基于多IP地址 了解
10.0.0.7----------->忍者
10.0.0.8----------->小霸王
1.配置一个ip地址
[root@web01 ~]# ip add add 10.0.0.8/24 dev ens33
2.配置文件修改为 10.0.0.7对应的是忍者业务
[root@web01 conf.d]# cat default.conf
server {
listen 10.0.0.7:80; # 监听的端口
server_name _; # 自己购买的域名 hosts解析
location / { # 路径匹配 www.oldboy.com/
root /code; # 让用户去/code目录获取网站信息
index index.html; # 默认给浏览器返回的文件 index.html
}
}
[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
[root@web01 conf.d]# systemctl restart nginx
3.检查当前的监听端口
[root@web01 conf.d]# netstat -tnulp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 10.0.0.7:80 0.0.0.0:* LISTEN 32133/nginx: master
增加小霸王业务 通过10.0.0.8IP访问
1.增加server配置
[root@web01 conf.d]# cat game.conf
server {
listen 10.0.0.8:80;
server_name _;
location / {
root /game;
index index.html;
}
}
2.创建代码目录
[root@web01 conf.d]# mkdir /game
[root@web01 conf.d]# cd /game/
3.上传小霸王游戏包
[root@web01 game]# ll
total 7708
-rw-r--r-- 1 root root 7890373 Dec 6 11:34 game.zip
[root@web01 game]# unzip game.zip
4.检测配置文件
[root@web01 game]# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
5.重启nginx
[root@web01 game]# systemctl restart nginx
浏览器访问: 10.0.0.7--->忍者
10.0.0.8--->小霸王
[root@web01 game]# netstat -tnulp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 10.0.0.8:80 0.0.0.0:* LISTEN 32233/nginx: master
tcp 0 0 10.0.0.7:80 0.0.0.0:* LISTEN 32233/nginx: master
为什么基于IP的用的少? 因为现在的带宽大部分都是BGP多线路。而不是单线
基于多端口 常用 80是给用户用的,自己的业务的后台不能让用户访问。自定义后台的端口
10.0.0.7:80------>忍者
10.0.0.7:81------>小霸王
忍者配置文件
[root@web01 conf.d]# cat default.conf
server {
listen 80; # 监听的端口
server_name _; # 自己购买的域名 hosts解析
location / { # 路径匹配 www.oldboy.com/
root /code; # 让用户去/code目录获取网站信息
index index.html; # 默认给浏览器返回的文件 index.html
}
}
小霸王配置文件
[root@web01 conf.d]# cat game.conf
server {
listen 81;
server_name _;
location / {
root /game;
index index.html;
}
}
[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
[root@web01 conf.d]# systemctl restart nginx
访问测试:
10.0.0.7:80
10.0.0.7:81
基于多域名 常用
www.oldboy.com-------->忍者
www.game.com-------->小霸王
配置忍者业务
[root@web01 conf.d]# cat default.conf
server {
listen 80; # 监听的端口
server_name www.oldboy.com; # 自己购买的域名 hosts解析
location / { # 路径匹配 www.oldboy.com/
root /code; # 让用户去/code目录获取网站信息
index index.html; # 默认给浏览器返回的文件 index.html
}
}
配置小霸王游戏业务
[root@web01 conf.d]# cat game.conf
server {
listen 80;
server_name www.game.com;
location / {
root /game;
index index.html;
}
}
[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
[root@web01 conf.d]# systemctl restart nginx
二、Nginx常用模块
1.autu_index索引模块
1.创建索引模块配置文件
[root@web01 /etc/nginx/conf.d]#vim index.conf
server{
listen 80;
server_name www.index.com;
autoindex on;
location / {
root /code/index;
index index.html;
}
}
2.创建目录
[root@web01 /etc/nginx/conf.d]#mkdir -p /code/index
3.重启nginx生效,修改nginx配置文件使用reload命令
[root@web01 conf.d]# systemctl restart nginx
4.配置Windows本地hosts解析
10.0.0.7 www.index.com
2.下载限制模块
charset utf-8,gbk; #默认中文目录乱码,添加上解决乱码。
autoindex_exact_size off; #默认为on, 显示出文件的确切大小,单位是bytes。 修改为off,显示出文件的大概大小,单位是kB或者MB或者GB。
autoindex_localtime on;#默认为off,显示的文件时间为GMT时间。修改为on, 显示的文件时间为文件的服务器时间。
server{
listen 80;
server_name www.index.com;
autoindex on;
limit_rate_after 50m;# 50m不限速,然后进行限速
limit_rate 1m; # 限制每秒1m的速度下载
location / {
root /code/index;
index index.html;
}
}
3、用户验证模块
#作用:登录网站的时候需要提供用户名和密码
1.需要安装httpd-tools,该包中携带了htpasswd命令
[root@web01 ~]#yum -y install httpd-tools
2.创建新的密码文件, -c创建新文件 -b允许命令行输入密码
[root@web01 ~]#htpasswd -b -c /etc/nginx/auth_conf oldboy oldboy
Adding password for user oldboy
[root@web01 ~]#cat /etc/nginx/auth_conf
oldboy:$apr1$6SPHKpA.$uIx2x3LvmGgLk6qk6c6W/1
3.修改Nginx配置文件
charset utf-8,gbk; #设置字符集
autoindex_exact_size off; #以KB MB G 显示文件大小
autoindex_localtime on; #以本地时间显示
server{
listen 80;
server_name www.index.com;
autoindex on; #开启索引模块
limit_rate_after 50m; #先下载50M 后限速
limit_rate 1m; #限速每秒1M
auth_basic "Auth access Blog Input your Passwd!"; # 访问限制模块的提示符
auth_basic_user_file auth_conf; #访问显示模块的用户名和密码的文件位置
location / {
root /code/index;
index index.html;
}
}
4.Nginx状态模块
#作用:显示用户访问nginx的连接信息
1.修改nginx配置文件
[root@web01 ~]#cat /etc/nginx/conf.d/game.conf
server{
listen 80;
server_name www.game.com;
location / {
root /code/game;
index index.html;
location /nginx_status{
stub_status;
}
}
}
2.检查语法
[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
3.浏览器访问http://www.game.com/nginx_status
Active connections: 6
server accepts handled requests
6 6 19
Reading: 0 Writing: 1 Waiting: 5
5.使用IP的访问限制
server{
listen 80;
server_name www.game.com;
location / {
root /code/game;
index index.html;
location /nginx_status{
stub_status;
allow 10.0.0.31; #只允许10.0.0.31访问nginx_status页面
deny all; # 拒绝所有的IP
}
}
}
6.TCP连接数限制
limit_conn_zone $remote_addr zone=conn_zone:10m;
#限制模块名称 客户端IP 开辟内存空间名称叫conn_zone 空间大小10M
server{
listen 80;
server_name www.game.com;
location / {
root /code/game;
index index.html;
limit_conn conn_zone 1; #限制空间李的所有ip同一时间只有1个TCP连接
location /nginx_status{
stub_status;
allow 10.0.0.31;
deny all;
}
}
}
7.请求数限制
#limit_conn_zone $remote_addr zone=conn_zone:10m;
limit_req_zone $remote_addr zone=req_zone:10m rate=10r/s; #每秒最多10个请求
server{
listen 80;
server_name www.game.com;
location / {
root /code/game;
index index.html;
# limit_conn conn_zone 5;
limit_req zone=req_zone burst=5 nodelay; #限制延迟处理5个 剩余的返回503
location /nginx_status{
stub_status;
allow 10.0.0.31;
deny all;
}
}
}
8.location匹配规则优先级
[root@web01 /etc/nginx/conf.d]#cat test.conf
server {
listen 80;
server_name www.oldboy.com;
default_type text/html;
location = / { #精确匹配 优先级最高
return 200 "configuration A ";
}
location / { #通用匹配 优先级最低
return 200 "configuration B ";
}
location /doucuments/ { #前缀匹配 优先级低于正则匹配
return 200 "configuration C ";
}
location ^~ /images/ { #前缀匹配 优先级仅次于 精确匹配
return 200 "configuration D ";
}
location ~* \.(gif|jps|jpeg)$ { #正则匹配 优先级次于前缀匹配
return 200 "configuration E ";
}
location ~ ^zkl {
return 200 "configuration F ";
}
}
匹配符 匹配规则 优先级
= 精确匹配 1
^~ 以某个字符串开头 2
~ 区分大小写的正则匹配 3
~* 不区分大小写的正则匹配 4
/ 通用匹配,任何请求都会匹配到 5
重点:
1.Nginx 七种状态
Active connections: 1 #当前建立的TCP连接数
server accepts # 已收到的连接数
handled #已响应的连接数
requests #总请求数
37 37 132
Reading: 0 #当前正在读取客户端请求头部字段的连接数
Writing: 1 #当前正在向客户端发送响应数据的连接数
Waiting: 0 #等待连接数
2.location匹配规则优先级
匹配符 匹配规则 优先级
= 精确匹配 1
^~ 以某个字符串开头 2
~ 区分大小写的正则匹配 3
~* 不区分大小写的正则匹配 4
/ 通用匹配,任何请求都会匹配到 5
Comments NOTHING