Nginx笔记
背景
- 前段时间配置Nginx内容,对配置内容的了解仅限于字面上的了解,并不利于全面理解nginx内容。故找了一些教程看看,现下作一些笔记
- Nginx下载来源:http://nginx.org/en/download.html
知识点
基础
真实环境中nginx、数据库版本的选择
选择距离目前3~6个月的稳定版本,数据库选择距离目前6到8个月稳定版本
零碎知识
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18查看官方库中是否有nginx
apt list | grep nginx
查看历史命令
history
查看最后执行的命令是否成功,输出为0表示没有错误
$?是ubuntu的特殊变量,表示最后命令的退出状态。
echo $?
查看端口占用
lsof -i :80
查看谁在使用某个文件
lsof /path_to_the_file
查看谁在使用网络
l:列表,n:数字,t:tcp链接,u:udp链接,p:程序,a:显示所有
sudo netstat -lntup | grep nginxnginx编译安装
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20wget的-q参数表示静默下载
wget -q http://nginx.org/download/nginx-1.18.0.tar.gz
tar -zxvf nginx-1.18.0.tar.gz
检查nginx编译时的依赖库,configure本身并不会直接安装软件。
cd nginx-1.18.0
查看编译时,可使用的参数:./configure --help
指定--user和--group是因为在linux中每个软件的使用都是需要身份的
./configure --user=www --group=www --with-http_ssl_module --prefix=/etc/nginx
用c语言进行编译
make
安装
make install
安装完成后检查配置文件是否准确
/etc/nginx/sbin/nginx -t
查看nginx
nginx命令
1 | nginx配置文件检测 |
nginx.conf配置
零碎知识
本地模拟dns
1
2配置本地的DNS,编辑【drivers/host】文件,添加如下内容,然后到前台打开即可
[IP] [域名]nginx.conf中的autoindex配置项
1
2设置为on,则可搭建一个文件下载服务端
autoindex on;网站界面如下:
ipconfig和ip给网卡添加ip
1
2
3
4
5
6
7
8添加配置IP,此处的网卡别名都是原网卡名,如原网卡名:[ens33],则网卡别名可以为:[ens33:1]
24表示IP掩码,代表:255.255.255.0
ifconfig [网卡别名] [ip]/24 up
ip addr add [ip]/24 dev [原网卡名] label [网卡别名]
删除IP
ifconfig [网卡别名] down
ip addr del [ip]/24 dev [原网卡名] label [网卡别名]
配置
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48核心模块
user www-data;
worker_processes auto; # 进程数,一般与核数相同,它相当于提供web服务的服务员数量
pid /run/nginx.pid; # 配置nginx的进程号
include /etc/nginx/modules-enabled/*.conf;
event模块
events {
worker_connections 768; # 最大连接数,它相当于每个服务员一次服务的最大客户数
}
http模块
http {
keepalive_timeout 65; # 连接超时时间
types_hash_max_size 2048;
include /etc/nginx/mime.types; # include标识包含的意思,意味着当前配置文件包含mime.types配置文件
default_type application/octet-stream;
ssl_prefer_server_ciphers on;
access_log /var/log/nginx/access.log; # 用户的访问日志
error_log /var/log/nginx/error.log error; # 记录的错误日志信息,如果不添加则默认error等级
gzip on;
# 可以将每个server单独配置一个配置文件,然后在http中将其导入进来即可,这样便于维护
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;
# server模块,一个server标识一个网站,可以有多个server
# 当通过IP进行访问的时候,默认返回第一个server对应的网站
server {
listen 80; # 默认web监听的端口为80
root /var/www/html; # 网站文件所在的目录
index index.html index.htm index.nginx-debian.html; # 首页的默认解析文件
server_name www.baibai.bai; # 网站的链接
autoindex on; # 将网站设置为一个文件下载库
# location可以有多个,其中=匹配的优先级最高
location / { # 若location未匹配上,则寻找该目录下的内容
if ($geoip2_data_country_code = CN) {
rewrite ^(.*)$ https://wozaidunkeng.xyz$request_uri;
}
}
error_page 500 501 502 503 504 /50x.html; # 如果发生错误,则寻找50x.html的页面
location = /50x.html { # 若location匹配上了50x.html,则寻找该目录下的内容
root html;
}
}
}
Nginx模块
ngx_http_stub_module模块:记录nginx的基本访问状态信息
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17查看是否有该信息
nginx -V
配置时可新建一个server,专门用于检测。建议配置成一个单独的页面。
server {
listen 80;
index index.html index.htm index.nginx-debian.html;
server_name status.baibai.bai;
location / {
stub_status on; # 开启nginx状态展示
access_log off; # 关闭日志记录
# 像这样的数据我们是不会允许其他人访问的,因此有时需要配置IP限制
allow 10.0.0.0/24; # 配置允许IP段的访问
deny all; # 配置禁止ip端的访问,all表示所有
}
}log模块:https://www.cnblogs.com/python-way/p/6251720.html
1
2
3
4
5
6
7
8定义日志格式,其中[$变量名]是nginx的特殊变量
log_format [格式名称]'$http_x_forwarded_for - $remote_user [$time_local] "$request" '
'"$status" $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for" '
'"$gzip_ratio" $request_time $bytes_sent $request_length';
按照定义的日志格式记录日志
access_log /var/log/nginx/access.log [日志格式名称];location配置
命令格式:
1
2
3
4
5
6
7
8location [=|~|^~|~*|@] [uri] { 匹配后进行的操作 }
匹配的含义
=:表示精确匹配,其优先级最高
~:用于区分大小写的匹配
~*:用于不区分大小写的匹配
!~ | !~*:加上!表示取反
^~:进行常规的字符串匹配检查后,不做正则表达式的检查优先级
优先级 组合 说明 1 location = / { … } 精确匹配 2 location ^~ /images/ { … } 匹配常规字符串,不做正则匹配检查 3 location ~* \.(jpg|png|)$ { … } 正则匹配 4 location /images/ { … } 匹配常规字符串,如果有正则则优先匹配正则 5 location / { … } 所有location都不能匹配后的默认匹配
rewrite配置
1
2配置nginx时只采用相对简单的url重写,复杂的则需要开发人员的协助
rewrite [正则] [替换方式] [标签]
拓展
curl命令:http://www.ruanyifeng.com/blog/2019/09/curl-reference.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44正常访问Url,返回浏览器的返回信息
curl [链接]
添加请求User-Agent
curl -A "客户端标识" [链接]
打印服务器回应的头和内容
curl -i [链接]
发送head请求
curl -I [链接]
跳过ssl检测
curl -k [链接]
跟随重定向
curl -L [链接]
输出通信整个过程
curl -v [链接]
-G参数:发送带参数的Get请求
curl -G -d "参数" [链接]
-d参数:默认发送post请求,并附带请求体,
-d同样支持json格式的数据,但需要与-H进行配合使用
curl -d 'login=emma&password=123'-X POST [链接]
也可以直接读取本地文件,使用-d参数后,可省略 -X POST
curl -d '@data.txt' https://google.com/login
对请求参数进行URL编码,--data-urlencode的作用与-d相同
curl --data-urlencode 'comment=hello world' https://google.com/login
添加请求头的referer
curl -e "来源链接" [链接]
上传二进制附件
curl -F "参数名=@文件名;type=文件类型;filename=上传后的文件名" [链接]
添加cookie
curl -b "foo1=bar;foo2=bar2" [链接]
将服务器cookie写入到本地文件
curl -c [文件名] [链接]