nginx服务

发布于 29 天前  22 次阅读


一、安装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
小棱
最后更新于 2024-12-24