1. 預設設定語法
nginx.conf作為主設定檔
include /etc/nginx/conf. d/*.conf讀到這會把該目錄的.conf也讀進來
1.1 全局性的和服務級別的
user 设置使用用户 worker_processes 进行增大并发连接数的处理 跟cpu保持一致 八核设置八个 error_log nginx的错误日志 pid nginx服务启动时候pid
1.2 event對事件的模組
worker_connections一个进程允许处理的最大连接数 use定义使用的内核模型
1.3 server
root 首页的路径 index 首页默认访问哪个页面 error_page 500 502 503 504 /50x.html 错误页面 前面的500是**`http状态码`** systemctl restart nginx.service 重启nginx systemctl reload nginx.service 不关闭服务柔和地重启
2. http
#curl-v http://www.baidu.com >/dev/null #-v 同时显示状态码等信息 nginx -v #显示nginx版本及配置文件等信息
##3. 日誌
# #日誌類型:error.log和access.log | log_format:設定了日誌的記錄格式,定義日誌以什麼樣的樣式記錄到error.log、access.log中,log_format的配置只能配置在http模組中。 | access_log配置在http。 |
limit_ | conn_module:tcp連線頻率限制, 一次tcp連線可以建立多次http請求。配置語法: | |
limit_conn_module語法 | 範圍 | 說明 |
##limit_conn_zone 識別zone=空間名稱:空間大小;
http
用於宣告一個儲存空間
用於限制某個儲存空間的並發數量 | limit_conn_log_level 日誌等級; | |
---|---|---|
limit_conn_status 狀態碼; | #http、server或location | |
#limit_conn_zone會宣告一個 | zone | 空間來記錄連線狀態, 才能限制數量。
zone 空間被耗盡,伺服器將會對後續所有的請求回傳 | 503(service temporarily unavailable)
---|
这里的zone也是用来存储连接的一个空间。
burst 和 nodelay
burst
和nodelay
对并发请求设置了一个缓冲区和是否延迟处理的策略。
先假设有如下zone
配置。
http { limit_req_zone $binan_remote_addr zone=req_zone:1m rate=10r/s; }
情况 1:limit_req zone=req_zone;
第1
秒发送10
个请求, 正常响应。
第1
秒发送13
个请求, 前10
个请求正常响应, 后3
个请求返回503(service temporarily unavailable)
。
不加brust
和nodelay
的情况下,rate=10r/s
每秒只能执行10
次请求, 多的直接返回503
错误。
情况 2:limit_req zone=req_zone brust=5;
第1
秒发送10
个请求, 正常响应。
第1
秒发送13
个请求, 前10
个请求正常响应, 后3
个请求放入brust
等待响应。
第1
秒发送20
个请求, 前10
个请求正常响应, 后5
个请求放入brust
等待响应, 最后5
个请求返回503(service temporarily unavailable)
, 第2
秒执行brust
中的5
个请求。
第1
秒发送20
个请求, 前10
个请求正常响应, 后5
个请求放入brust
等待响应, 最后5
个请求返回503(service temporarily unavailable)
, 第2
秒发送6
个请求, 执行brust
中的5
个请求, 将5
个请求放入brust
等待响应, 剩下的1
个请求返回503(service temporarily unavailable)
。
加brust=5
不加nodelay
的情况下, 有一个容量为5
的缓冲区,rate=10r/s
每秒只能执行10
次请求, 多的放到缓冲区中, 如果缓冲区满了, 就直接返回503
错误。而缓冲区在下一个时间段会取出请求进行响应, 如果还有请求进来, 则继续放缓冲区, 多的就返回503
错误。
情况 3:limit_req zone=req_zone brust=5 nodelay;
第1
秒发送10
个请求, 正常响应。
第1
秒发送13
个请求,13
个请求正常响应。
第1
秒发送20
个请求, 前15
个请求正常响应, 后5
个请求返回503(service temporarily unavailable)
。
第1
秒发送20
个请求, 前15
个请求正常响应, 后5
个请求返回503(service temporarily unavailable)
, 第2
秒发送6
个请求, 正常响应。
加brust=5
和nodelay
的情况下, 有一个容量为5
的缓冲区,rate=10r/s
每秒能执行15
次请求,15=10+5
。多的直接返回503
错误。
基于 ip 的访问控制
http_
access_module: 基于ip的访问控制, 通过代理可以绕过限制, 防君子不防小人。
http_access_module语法 | 范围 | 说明 |
---|---|---|
allow ip地址 | cidr网段 | unix: | all; | http、server、location和limit_except | 允许ip地址、cidr格式的网段、unix套接字或所有来源访问 |
deny ip地址 | cidr网段 | unix: | all; | http、server、location和limit_except | 禁止ip地址、cidr格式的网段、unix套接字或所有来源访问 |
allow和deny会按照顺序, 从上往下, 找到第一个匹配规则, 判断是否允许访问, 所以一般把all
放最后
location / { deny 192.168.1.1; allow 192.168.1.0/24; allow 10.1.1.0/16; allow 2001:0db8::/32; deny all; }
基于用户密码的访问控制
ht
tp_auth_basic_module: 基于文件匹配用户密码的登录
http_auth_basic_module语法 | 范围 | 说明 |
---|---|---|
auth_basic 请输入你的帐号密码 | off; | http、server、location和limit_except | 显示用户登录提示 (有些浏览器不显示提示) |
auth_basic_user_file 存储帐号密码的文件路径; | http、server、location和limit_except | 从文件中匹配帐号密码 |
密码文件可以通过htpasswd
生成,htpasswd
需要安装yum install -y httpd-tools
。
# -c 创建新文件, -b在参数中直接输入密码 $ htpasswd -bc /etc/nginx/conf.d/passwd user1 pw1 adding password for user user1 $ htpasswd -b /etc/nginx/conf.d/passwd user2 pw2 adding password for user user2 $ cat /etc/nginx/conf.d/passwd user1:$apr1$7v/m0.if$2kpm9nvvxbav.jsuvuqr01 user2:$apr1$xmoo4zzy$df76u0gzxbd7.5vxe0use0
以上是基於Nginx如何實現存取控制、連線限制的詳細內容。更多資訊請關注PHP中文網其他相關文章!