Nginx 要点记录
Игорем Сысоевым
yum 安装
1 | yum install epel-release -y |
编译安装,编译目录 /opt/nginx,nginx 源码目录 /opt/source/nginx-1.19.0
配置参数:prefix, pid-path, conf-path, with-pcre, with-zlib 等。
模块不内置使用 –with 添加,内置了使用 –without 移除。
1 | tar xf nginx-1.19.0.tar.gz |
查看编译的 nginx 有哪些命令:/opt/nginx/sbin/nginx -h
常用命令:/opt/nginx/sbin/nginx -t,检查配置文件语法是否正确;/opt/nginx/sbin/nginx -s signal,向进程发射信号量。
Nginx 程序的 4 个组成部分(yum 包安装,非编译安装):二进制执行程序 /usr/sbin/nginx
、配置文件 /etc/nginx/nginx.conf
、/var/log/nginx/access.log
、/var/log/nginx/error.log
文件结构:{main, events, {http, {server, {location, [location]}}, [server]}}
子进程使用共享内存
通信,反向代理
时,CacheManager 管理缓存,CacheLoader 加载缓存
1 | kill -l |
Master 进程的任务:监控 worker 进程CHLD
;管理 worker 进程;接收信号TERM, INT, QUIT, HUP, USR1, USR2, WINCH
Worker 进程的任务:接收信号TERM, INT, QUIT, USR1, WINCH
sbin 目录下的程序加参数运行:reload: HUP; reopen: USR1; stop: TERM; quit: QUIT
1 | lscpu |
reload 重载配置文件流程:向 master 进程发送 HUP 信号 => master 检测语法正确 => master 打开监听端口(新配置可能配置新端口)=> master 启动新 worker 子进程 => master 向旧 worker 发送 QUIT 信号 => 旧 worker 关闭监听句柄,处理完关闭进程
热(平滑)升级流程:
1 | => 旧 nginx 文件替换成新 nginx 文件 |
Linux 自身最大打开文件数:65535
1 | mkdir /opt/nginx/tmp |
server_name 优先级:精准,左侧通配符,右侧通配符,正则
root 和 alias 的区别:root 导致在映射路径尾部叠加上层路径,alias 重命名即尾部不叠加;alias 末尾一定加“/”,alias 只能位于 location 块中。
location 指令中匹配规则优先级:高 = -> ^~ -> ~ -> ~* -> 低
location 指令:
规则 | 含义 | 例子 |
---|---|---|
= | 精确匹配 | location = /images/ {…} |
~ | 正则 | location ~ \.(jpg|gif)$ {…} |
~* | 正则,不区分大小写 | location ~* \.(jpg|gif)$ {…} |
^~ | 匹配到即停止搜索 | location ^~ /images/ {…} |
不带符号 | location / {…} |
location URL 带不带反斜杠 \ 的区别:不带杠将导致—检查文件夹,若无再检查文件,反之只检查目录。
if 的 condition:
condition | description |
---|---|
$variable | 仅为变量时,值为空或以 0 为开头的字符串都是 false |
= 或 != | 相等或不等比较 |
~ 或 !~ | 正则匹配或非正则匹配 |
~* | 正则匹配不区分大小写 |
-f 或 !-f | 检查文件存在或不存在 |
-d 或 !-d | 检查目录存在或不存在 |
-e 或 !-e | 检查文件、目录、符号链接等存在或不存在 |
-x 或 !-x | 检查文件可不可执行。 |
limit_conn 模块的基本功能:限制客户端并发连接数;使用共享内存,对所有 worker 子进程生效;默认编译,用 –without-http_limit_conn_module 禁用
limit_req 模块的基本功能:限制处理请求的平均数据;默认编译;共享内存;限流算法 leaky_bucket 算法
1 | access 模块限定 ip、网段;auth_basic 限定特定用户,without 禁用默认;auth_request 鉴权服务器收到 http 状态码做访问控制;rewrite 模块的 return 指令;rewrite 模块的 rewrite 指令,flag 有 last 和 break 和 permanent 和 redirect; |
auth_basic 模块:基于 HTTP Basic Authentication 协议进行用户名密码认证;auth_basic_user_file 命令设置密码文件地址,auth_basic 命令设置浏览器给用户的提示文字。
反向代理优势:隐藏真实服务器;便于横向扩充,提升吞吐量;动静分离,更健壮。
upstream 模块的部分解释:server 字段 parameters 参数的 fail_timeout 和 max_fails 的值表示,Nginx 发现应用服务器不可用时开始计时,在该时间里尝试请求次数达到最多次数,剩余的时间里不再请求server文档;keepalive 字段的 connections 参数值是空闲长连接的最大数量;keepalive_requests 限制单个长连接最多请求次数;keepalive_timeout 超过时间自动销毁。
proxy_pass 带不带反斜杠 \ 的区别:不带,上网的人请求什么地址 nginx 向上游透传什么地址,带则把和 location 重叠的部分删去后再请求上游。
代理场景下 nginx 接收用户请求包体的相关参数:client_max_body_size, client_body_buffer_size, client_body_in_file_only, client_body_in_single_buffer, proxy_request_buffering, client_body_timeout.
client_max_body_size:设置上传报文体的大小,如果大于设置值将报“request entity too large”错误。
负载均衡器的抛出问题:session 共享;选择应用服务器的算法;应用服务器的缓存信息在 nginx 上的保存。
ほしのかけら
二级域名转发:
- https://blog.csdn.net/qq_22317977/article/details/103270616?utm_medium=distribute.pc_aggpage_search_result.none-task-blog-2~all~first_rank_v2~rank_v25-11-103270616.nonecase;
- https://blog.csdn.net/lzx_victory/article/details/52835907?utm_medium=distribute.pc_relevant_bbs_down.none-task--2~all~first_rank_v2~rank_v25-2.nonecase&depth_1-utm_source=distribute.pc_relevant_bbs_down.none-task--2~all~first_rank_v2~rank_v25-2.nonecase。
vim 命令
1 | 9yy |
shell 命令
1 | mkdir {all-match,left-match,right-match} |
Reference
Common Nginx misconfigurations that leave your web server open to attack:阮一峰 2021/03,常见的 Nginx 不安全配置;搜索了一下,很快被网友翻译成了中文,常见的 Nginx 配置错误,使您的 Web 服务器可以被攻击。