个人笔记nginx:nginx的部署游戏,创建仓库及限制,监控,location匹配和日志

一、部署多个server在一台服务器上面

1.基于多个IP实现方式(很少)

目标:
10.0.0.7返回hello 10.7
172.16.1.7返回hello 172.7


[root@web01 ~]# cat /etc/nginx/conf.d/ip.conf
server {
        listen 10.0.0.7:80;
        location / {
                root /ip1;
                index index.html;
        }
}
server {
        listen 172.16.1.7:80;

        location / {
                root /ip2;
                index index.html;
        }
}
[root@web01 ~]# mkdir /ip1
[root@web01 ~]# mkdir /ip2
[root@web01 ~]# echo "hello,10.7" > /ip1/index.html
[root@web01 ~]# echo "hello,172.7" > /ip2/index.html
[root@web01 ~]# systemctl restart nginx

测试
[root@web01 ~]# curl 10.0.0.7:80
hello,10.7
[root@web01 ~]# curl 172.16.1.7:80
hello,172.7
2.基于不同的端口方式(测试)
[root@web01 ~]# cat /etc/nginx/conf.d/port.conf
server {
	listen 8081;

	location / {
		root /port1;
		index index.html;
	}
}
server {
	listen 8082;

	location / {
		root /port2;
		index index.html;
	}
}
[root@web01 ~]# mkdir /port1
[root@web01 ~]# mkdir /port2
[root@web01 ~]# echo "8081" > /port1/index.html
[root@web01 ~]# echo "8082" > /port2/index.html
[root@web01 ~]# nginx -t
[root@web01 ~]# systemctl reload nginx
5.基于不用域名的方式

目标:
docs.ux.com返回 docs
test.xu.com返回 test

cat /etc/nginx/conf.d/all.xu.com.conf
#在一个文件中,编写三个站点(实际生产都是一个域名对应一个文件,这样能够清晰找到对应的配置)

server {
	listen 80;
	server_name docs.xu.com;

	location / {
		root /docs;
		index index.html;
	}
}

server {
	listen 80;
	server_name test.xu.com;

	location / {
		root /test;
		index index.html;
	}
}
[root@web01 ~]# mkdir /docs
[root@web01 ~]# mkdir /test
[root@web01 ~]# echo "docs" > /docs/index.html
[root@web01 ~]# echo "test" > /test/index.html
[root@web01 ~]# nginx -t
[root@web01 ~]# systemctl restart nginx

记得配置域名解析(我们由于是假的域名,所以配置DNS劫持即可)

二、创建本地YUM仓库

server{
        listen 80;
        server_name mirrors.xu.com;
        charset utf-8;

        location / {
                root /mirrors;
                index index.html;
                autoindex on;
        }
        #提供yum源的仓库
        location /mirrors/repo {
                autoindex on;
                autoindex_exact_size off;
                autoindex_localtime on;
        }
}
#同步源至本地
[root@web01 mirror]# rsync -avz rsync://rsync.mirrors.ustc.edu.cn/repo/centos/  /mirror/repo/
添加用户名和密码
1.准备一个密码文件
[root@web01 mirror]# yum install httpd-tools -y
[root@web01 mirror]# htpasswd -cb /etc/nginx/auth_pass xu 123456

2.给mirrors.xu.cm的/repo添加用户密码认证
[root@web01 ~]# cat /etc/nginx/conf.d/mirrors.xu.com.conf 
server{
	listen 80;
	server_name mirrors.xu.com;
	charset utf-8;
	root /mirrors;
	
	location / {
		index index.html;
		autoindex on;
	}
	#提供yum源的仓库
	location /repo {
		autoindex on;
		autoindex_exact_size off;
		autoindex_localtime on;

	
	auth_basic "hello";
	auth_basic_user_file  "/etc/nginx/auth_pass";
	}
}

三、访问限制

1.请求限制(limit_req)
[root@web01 mirror]# cat /etc/nginx/conf.d/limit.oldxu.com.conf

#定义了一个10m内存空间,名称叫req_one 限制的速率是 每S 1个请求,针对的来源的IP地址
limit_req_zone $binary_remote_addr zone=req_one:10m rate=1r/s;

server {
	listen 80;
	server_name  limit.oldxu.com;
# 请求超过1r/s,剩下的将被延迟处理,请求数超过burst定义的数量,则返回503
   	 limit_req zone=req_one burst=3 nodelay;

	location / {
		root /limit;
		index index.html;
	}
}
2.连接限制(limit_conn)
[root@web01 mirror]# cat /etc/nginx/conf.d/limit.oldxu.com.conf

#请求限制:定义了一个10m内存空间,名称叫req_one 限制的速率是 每S 1个请求,针对的来源的IP地址
limit_req_zone $binary_remote_addr zone=req_one:10m rate=1r/s;

#连接限制: 定义了一个10m内存空间,名称叫conn_od,针对的是来源的IP
limit_conn_zone $binary_remote_addr zone=conn_od:10m;


server {
	listen 80;
	server_name  limit.oldxu.com;
	limit_conn  conn_od 2;
	limit_rate_after 100m; #先让其最快速下载100m,然后开始限速
	limit_rate 200k;   		#限速

	location / {
		root /limit;
		index index.html;
	}

}

实际案例
[root@web01 mirror]# cat   /etc/nginx/conf.d/limit.oldxu.com.conf
limit_req_zone $binary_remote_addr zone=req_one:10m rate=1r/s;
limit_conn_zone $binary_remote_addr zone=conn_od:10m;

server {
	listen 80;
	server_name  limit.oldxu.com;
	charset utf-8;
	limit_req zone=req_one burst=5 nodelay;	#请求限制
	limit_conn  conn_od 1;			#连接限制
	limit_rate_after 100m; 			#100m不限速
	limit_rate 500k;   			#限速500k

	location / {
		root /limit;
		index index.html;
	}


	#错误接收 @err是一个特殊的重定向
	error_page 503  @err;

	location @err {
		default_type text/html;
		return 200 '请联系oldxu充值,联系qq:552408925';
	}
}

四、监控模块(stub_stauts)

#开启nginx的状态模块
location /status{
	stub_status
}
提供以下状态信息 7种状态指标
状态含义
Active connections当前活跃连接数,包括Waiting等待连接数。
accepts已接收的总TCP连接数量。
handled已处理的TCP连接数量。
requests当前总http请求数量。
Reading当前读取的请求头数量。
Writing当前响应的请求头数量。
Waiting当前等待请求的空闲客户端连接数

五、location匹配

1.匹配规则
匹配符匹配规则优先级
=精确匹配1
^~以某个字符串开头2
~区分大小写的正则匹配3
~*不区分大小写的正则匹配4
/通用匹配,任何请求都会匹配到5
server {
    listen 80;
    server_name location2.oldxu.com;

    # 通用匹配,任何请求都会匹配到
    location / {
        root html;
        index index.html;
    }

    # 精准匹配,必须请求的uri是/nginx_status
    location = /nginx_status {
        stub_status;
    }

    # 严格区分大小写,匹配以.php结尾的都走这个location    		xx.com/1.php
    location ~ \.php$ {
        default_type text/html;
        return 200 'php访问成功';
    }

    # 严格区分大小写,匹配以.jsp结尾的都走这个location 
    location ~ \.jsp$ {
        default_type text/html;
        return 200 'jsp访问成功';
    }

    # 不区分大小写匹配,只要用户访问.jpg,gif,png,js,css 都走这条location
    location ~* \.(jpg|gif|png|js|css)$ {
        return 403;
    }

    # 不区分大小写匹配
    location ~* \.(sql|bak|tgz|tar.gz|.git)$ {
        deny all;
    }
}
2.location(@ 内部重定向)
 error_page 404 403 401 @err;
 location @err {
          default_type text/html;
         return 200 '你可能是不小心走丢了。';
 }

六、nginx日志

1.日志格式 log_format
log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                  '$status $body_bytes_sent "$http_referer" '
                  '"$http_user_agent" "$http_x_forwarded_for"';
$remote_addr        # 记录客户端IP地址
$remote_user        # 记录客户端用户名
$time_local         # 记录通用的本地时间
$time_iso8601       # 记录ISO8601标准格式下的本地时间
$request            # 记录请求的方法以及请求的http协议
$status             # 记录请求状态码(用于定位错误信息)
$body_bytes_sent    # 发送给客户端的资源字节数,不包括响应头的大小
$bytes_sent         # 发送给客户端的总字节数
$msec               # 日志写入时间。单位为秒,精度是毫秒。
$http_referer       # 记录从哪个页面链接访问过来的
$http_user_agent    # 记录客户端浏览器相关信息
$http_x_forwarded_for #记录客户端IP地址
$request_length     # 请求的长度(包括请求行, 请求头和请求正文)。
$request_time       # 请求花费的时间,单位为秒,精度毫秒
2.访问日志
  • access_log /var/log/nginx/access.log main
  • 每一个server都会定义一个access_log。为了区分网站的访问记录
	http {
		access_log   /var/log/nginx/access.log main;
		server {
			# access_log /var/log/nginx/log.oldxu.com.log main;
		}
  • 如果某个网站不想记录日志,则可以通过如下两种方式去实现
server {
			access_log off;
			#access_log /dev/null;
		}
3.错误日志
  • error_log /var/log/nginx/error.log warn;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值