Nginx基本使用
目录
[TOC]
Nginx的安装
Nginx的版本区别
nginx-plus商业版:https://www.nginx.com/
Tengine:http://tengine.taobao.org/
安装/启动/停止
Windows停止taskkill /f /t /im nginx.exe
安装参考:https://www.cnblogs.com/makecode/articles/9996639.html
将tar.gz的安装文件放入
opt
目录中执行解压命令
1
2
3
4
5
6
7
8
9
10
11
12
13第一步:安装nginx所需的依赖(如果有依赖,则直接跳过此目录)
yum install -y gcc pcre pcre-devel zlib zlib-devel openssl openssl-devel
下载nginx到opt目录下面
wget https://nginx.org/download/nginx-1.22.1.tar.gz
第三步:解压nginx压缩包,进入nginx目录,执行`configure`编译nginx看是否还有错误
(可以使用【--prefix=`指定目录`】命令来指定安装目录)
./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module --with-http_gzip_static_module
第四步:继续执行下列命令
make
make install运行nginx
1
2
3
4
5
6
7
8
9
10
11
12
13第一步:进入nginx的安装目录下的sbin目录进行启动
cd /usr/local/nginx/sbin
第三步:启动nginx
./nginx
第四步:浏览器访问
http://ip:80/
第五步:如果访问不到,关闭防火墙
systemctl stop firewalld.service # 关闭防火墙
systemctl disable firewalld.service # 禁止开机启动防火墙
firewall-cmd --reload # 重启防火墙启动 / 重启 nginx
1
2
3
4
5
6
7
8第一步:进入nginx的sbin目录,【一定要是上面安装时指定的目录】
cd /usr/local/nginx/sbin
第二步:启动命令
./nginx # 启动
./nginx -s stop # 快速停止
./nginx -s quit # 优雅关闭,在退出前完成已经接受的连接请求
./nginx -s reload # 重新加载配置创建服务脚本,设置nginx的开机自启动(将nginx安装成系统服务)
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创建服务脚本
vim /usr/lib/systemd/system/nginx.service
粘贴如下命令
[Unit]
Description=nginx - web server
After=network.target remote-fs.target nss-lookup.target
[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid
ExecStartPre=/usr/local/nginx/sbin/nginx -t -c /usr/local/nginx/conf/nginx.conf ExecStart=/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf ExecReload=/usr/local/nginx/sbin/nginx -s reload
ExecStop=/usr/local/nginx/sbin/nginx -s stop
ExecQuit=/usr/local/nginx/sbin/nginx -s quit PrivateTmp=true
[Install]
WantedBy=multi-user.target
上面开机启动设置后,如果启动失败,替换为下面的
[Unit]
Description=nginx
After=network.target
[Service]
Type=forking
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/usr/local/nginx/sbin/nginx -s reload
ExecStop=/usr/local/nginx/sbin/nginx -s quit
PrivateTmp=true
[Install]
WantedBy=multi-user.target
如果nginx启动了,先关闭nginx在使用systemctl启动nginx
ps -ef | grep nginx
nginx如果启动,再执行下列命令
./nginx -s stop # 进入nginx安装目录的sbin目录下面
重新加载系统服务
systemctl daemon-reload
启动nginx和设置开机启动
systemctl start nginx.service
systemctl enable nginx.service
Nginx的目录结构
conf
用来存放配置文件相关
html
用来存放静态文件的默认目录 html、css等
sbin
nginx的主程序
基本运行原理
Nginx配置文件与应用场景
部分配置文件
worker_processes
worker_processes
默认为1,表示开启一个业务进程
worker_connections
worker_connections 1024
单个业务进程可接受连接数
include mime.types;
·include mime.types;
引入http mime类型
后面可以使用include引入自定义配置,上面的
mime.type
文件在conf目录下面,用于标注数据是什么类型的。例如:html会被标注为text/html,CSS会被标注为text/css,具体可以去看文件内容,也可自定义添加配置
default_type application/octet-stream;
default_type application/octet-stream;
如果mime类型没匹配上,默认使用二进制流的方式传输。
sendfile on;
sendfile on;
使用linux的sendfile(socket, file, len)
高效网络传输,也就是数据0拷贝。建议开启
未开启sendfile
开启sendfile
keepalive_timeout 65;
反向代理再看
server
虚拟主机配置
1 | server { |
虚拟主机和域名解析
原本一台服务器只能对应一个站点,通过虚拟主机技术可以虚拟化成多个站点同时对外提供服务
server_name匹配规则
可以在同一个server_name中匹配多个域名
1 | server_name www.xiaofei.com static.xiaofei.com; |
通配符匹配
1 | server_name *.xiaofei.com; |
通配符结束匹配
1 | server_name vod.*; |
正则匹配
1 | server_name ~^[0-9]+\.mmban\.com$; |
server_name根据端口配置虚拟主机(没有域名)
同一ip不同端口,访问不同资源
1 | worker_processes 1; |
server_name根据域名配置虚拟主机(有域名)
相同ip,相同端口,不同域名,访问不同资源
1 | worker_processes 1; |
域名解析相关企业项目实战技术架构
- 域名解析与泛域名解析实战
- 多用户二级域名
- 短网址
- Http Dns
需要了解,自行百度
反向代理
网关、代理与反向代理
反向代理在系统/架构中的应用场景
Nginx的反向代理配置
基于反向代理的负载均衡器
负载均衡策略
基本使用
1 | worker_processes 1; |
负载均衡
注意:负载均衡需要和反向代理一起使用
负载均衡基本用法
1 | worker_processes 1; |
负载均衡策略
轮询
默认情况下使用轮询方式,逐一转发,这种方式适用于无状态请求。
weight(权重)
指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。
- down:表示当前的server暂时不参与负载
- weight:默认为1.weight越大,负载的权重就越大。
- backup: 其它所有的非backup机器down或者忙的时候,请求backup机器。
标注为备用机,其他机器宕机才启动
1 | upstream httpd { |
ip_hash
根据客户端的ip地址转发同一台服务器,可以保持会话。
least_conn
最少连接访问
url_hash
根据用户访问的url定向转发请求
fair
根据后端服务器响应时间转发请求
动静分离
1 | worker_processes 1; |
location前缀
/
通用匹配,任何请求都会匹配到
=
精准匹配,不是以指定模式开头
~
正则表达式匹配,区分大小写
~*
正则表达式匹配,不区分大小写
^~
非正则表达式匹配,匹配以指定模式开头的location
location匹配顺序
- 多个正则location直接按书写顺序匹配,成功后就不会继续往后面匹配
- 普通(非正则)location会一直往下,直到找到匹配度最高的(最大前缀匹配)
- 当普通location与正则location同时存在,如果正则匹配成功,则不会再执行普通匹配
- 所有类型location存在时,“=”匹配 > “^~”匹配 > 正则匹配 > 普通(最大前缀匹配)
alias与root
root用来设置根目录,而alias在接受请求的时候在路径上不会加上location。
1 | location /css { |
- alias指定的目录是准确的,即location匹配访问的path目录下的文件直接是在alias目录下查找的;
- root指定 的目录是location匹配访问的path目录的上一级目录,这个path目录一定要是真实存在root指定目录下的;
- 使用 alias标签的目录块中不能使用rewrite的break(具体原因不明);另外,alias指定的目录后面必须要加上”/“符 号!!
- alias虚拟目录配置中,location匹配的path目录如果后面不带”/“,那么访问的url地址中这个path目录后 面加不加”/“不影响访问,访问时它会自动加上”/“; 但是如果location匹配的path目录后面加上”/“,那么访问的url地 址中这个path目录必须要加上”/“,访问时它不会自动加上”/“。如果不加上”/“,访问就会失败!
- root目录配置中,location匹配的path目录后面带不带”/“,都不会影响访问。