官网参考文档:http://nginx.org/en/docs/
1. 基本操作
1.1 开启服务
注:Nginx默认监听80端口,所以在Linux中需要放开80端口防火墙,输入以下命令
iptables -I INPUT -p tcp —dport 80 -j ACCEPT //开放端口 service iptables save //保存防火墙配置 service iptables restart //重启防火墙配置
查看当前防火墙状态
service iptables status //查看当前防火墙状态
# 进入到sbin文件夹中执行以下命令
./nginx
# 以指定配置开启服务
./nginx -c 配置文件路径/配置文件
1.2 关闭服务
# 进入到sbin文件夹中,执行以下命令
./nginx -s stop
如果想要等待当前任务执行完毕后再停止服务
./nginx -s quit
也可以通过kill PID来杀死Nginx进程
1.3 重启服务
#重新加载配置文件(平滑重启)
nginx -s reload
1.4 给Nginx添加链接
添加链接后,就能在任何地方使用Nginx命令来进行操作了
ln -s /home/user01/nginx/sbin/nginx /usr/local/sbin/nginx
1.5 user is not in the sudoers file
1.以root身份登录。
2.更改文件权限:
chmod u+w /etc/sudoers
保存退出。
user ALL=(ALL)ALL
保存退出。
4.还原文件权限:
chmod u-w /etc/sudoers
2. 配置文件
2.1 Nginx添加模块
例如添加http_ssl_module模块:
—在nginx的目录下,输入以下命令 ./configure —with-http_ssl_module
2.2 Nginx配置文件的结构
2.3 默认配置指令
2.4 Nginx中用户和组
2.5 自定义错误页
常见的几种配置方式
errr_page 500 502 503 504 /50x.html ;
#指定网站极目呆下的页商 40x.html ,处琦 403 错误
errr_page 403 /40x.html ;
#指定网站根目录下的网片 404 间,处理 404 错误
error_page 404 /404.jpg;
其他配置方式
#可以修改状态码
err r_page 404 =200 /404.html ;
2.6 root和alias的区别
2.7 配置文件分离
当一个Nginx服务器可运行多个虚拟主机,如果讲所有虚拟主机的配置全部放在nginx.conf文件中,则会造成nginx.conf文件过大,可以通过include指令讲配置文件进行分离后引入
第一步:新建配置文件zsf.nginx.conf,输入以下内容
server{
listen 8081;
server_name 127.0.0.1
location / {
root /dist #静态资源配置路径
index index.html index.htm
}
}
第二步:修改nginx.conf
http {
include zsf.nginx.conf # 用于引入配置文件
#log_format log_template '[ip:]$remote_addr [time:]$time_local [user_agent:]"$http_user_agent"';
#access_log logs/access.log log_template buffer=2k flush=5s;
access_log off;
....
}
3. 安全策略-访问控制
3.1 权限控制-限制ip访问
权限控制指令allow/deny,在使用时,权限指令只需要跟上允许或禁止的IP、IP段或all即可
location / {
root html;
index index.html index.htm;
error_page 500 502 503 504 /50x.html;
allow 36.106.64.152; #设置访问nginx服务器允许的ip地址 注:上面的会覆盖下面的,里面的会覆盖外面的
deny all; #设置不允许访问nginx服务器的ip地址
}
3.2 权限控制-限制资源访问
使用location进行资源访问的限制,location的语法如下:
location [=|~|~*|^~]URI {
}
或者
location @name {
}
location分为普通location和正则location
1) 对于正则location符合先定义先执行
2) 对于普通location符合最大前缀匹配原则
3) 当正则location和普通location同时存在时,如果正则location匹配成功,则不会再执行普通location,即优先执行正则匹配,再执行普通匹配
禁用正则匹配
1) 利用 =精准匹配或^~非正则匹配可以在正则匹配之前优先匹配,从而禁止执行原有的正则匹配
3.3 显示其他路径下文件
Nginx默认是不允许列出整个列表的,所以,当用于访问某一站点或目录,切该站点或目录下没有index指令设置的默认索引文件,例如index.html,就会报403forbbiden错误
#Nginx中开启文件列表访问功能,可以配置在http下,也可以具体配置在server中
autoindex on;
#显示文件大小
autoindex_exact_size off;
#显示文件最后一次修改时间
autoindex_localtime on;
4. 日志归集
4.1 创建脚本
#!/bin/bash
#当前Nginx日志文件存放的目录
logs_path="/home/user01/nginx-1.20.0/logs/"
#备份日志文件
mv $logs_path/access.log $logs_path/`date -d yesterday+"%Y%m%d"`.log
#重新生成今天的日志
sudo /home/user01/nginx-1.20.0/sbin/nginx -s reopen
4.2 为脚本设置可执行权限
chmod +w autolog.sh
4.3 配置自动备份
# Step1:输入以下命令
crontab -e
# Step2:按照如下格式添加一条数据
0 0 * * * /usr/local/nginx/logs/192.168.78.3/autolog.sh > /dev/null 2>&1
补充:
crontab -l #查看当前crontab文件的内容
crontab -r #删除设置的任务计划
5. 配置主机
5.1 基于listen配置虚拟主机
每一个server都是一个主机
访问虚拟主机的方式:
1) 通过配置listen设置开放端口
2) 通过配置server_name设置虚拟主机IP/域名
当设置完以后,这个server就是这台服务器上的一台虚拟主机(注,当前实现的功能类似于静态资源服务器,并不具有代理功能)
server {
listen 80; # 监听端口
# server_name ''; # 设置主机域名
location / {
root html; # 设置主机站点根目录地址
index index.html index.htm; # 设置默认索引文件
error_page 500 502 503 504 /50x.html; #设置默认错误页面
allow all;
#deny all;
}
}
5.2 基于server_name配置虚拟主机
5.2.1 方式一:设置IP别名
第一步:通过配置文件方式设置IP别名
1)修改网络配置文件
cd /etc/sysconfig/network-scripts/
2)复制网络配置文件
cp ifcfg-eth0 ifcfg-eth0:1
cp ifcfg-eth0 ifcfg-eth0:2
3)修改复制好的配置文件
DEVICE=eth0:1
IPADDR=新IP1
或通过ifconfig和route命令设置IP别名
ifconfig eth0:1 192.168.78.4 broadcast 192.168.78.255 netmask 255.255.255.0 up
route add -host 192.168.78.4 dev eth0:1
补充:设置开启启动执行上面两条命令:
vi /etc/rc.local 在文件末尾添加上面两条命令
第二步:配置nginx
# nginx监听192.168.78.3
server {
listen 80; # 监听端口
server_name 192.168.78.3; # 设置主机域名
location / {
root html; # 设置主机站点根目录地址
index index.html index.htm; # 设置默认索引文件
error_page 500 502 503 504 /50x.html; #设置默认错误页面
allow all;
#deny all;
}
}
# nginx监听192.168.78.4
server {
listen 80; # 监听端口
server_name 192.168.78.4; # 设置主机域名
location / {
root html; # 设置主机站点根目录地址
index index.html index.htm; # 设置默认索引文件
error_page 500 502 503 504 /50x.html; #设置默认错误页面
allow all;
#deny all;
}
}
5.2.2 方式二:基于域名配置虚拟主机
第一步:修改hosts文件,实现网站的域名访问
vi /etc/hosts
添加以下内容
127.0.0.1 www.ng.test
127.0.0.1 ng.test
第二步:配置nginx
# nginx监听www.ng.test
server {
listen 80; # 监听端口
server_name www.ng.test; # 设置主机域名
location / {
root html; # 设置主机站点根目录地址
index index.html index.htm; # 设置默认索引文件
error_page 500 502 503 504 /50x.html; #设置默认错误页面
allow all;
#deny all;
}
}
# nginx监听192.168.78.4
server {
listen 80; # 监听端口
server_name ng.test; # 设置主机域名
location / {
root html; # 设置主机站点根目录地址
index index.html index.htm; # 设置默认索引文件
error_page 500 502 503 504 /50x.html; #设置默认错误页面
allow all;
#deny all;
}
}
6. 反向代理、负载均衡、缓存
补充:正向代理和反向代理的区别
正向代理是为了解决客户端无法访问目的主机的情况下,通过正向代理去获取资源
反向代理可以用于隐藏资源真正的服务器地址,提高安全性
即反向代理主要考虑的是安全性问题,正向代理主要考虑的是无法访问的问题
6.1 反向代理
nginx中设置反向代理的方法:通过proxy_pass命令进行设置
server {
listen 80; # 监听端口
server_name ''; # 设置主机域名
location / {
proxy_pass http://111.163.123.68;
proxy_set_header Host 111.163.123.68:8801;
}
}
location / {
proxy_pass http://192.168.78.200;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
6.2 负载均衡
6.2.1 轮询方式
upstream web_server{
server 192.168.78.128;
server 192.168.78.200;
#server xxxx backup; #用于预留的备用机器,当其他机器都宕机,则负载到这里
#server xxxx down;表示该服务区宕机,不参与负载
}
6.2.2 权重方式
upstream web_server{
server 192.168.78.128 weight=1;
server 192.168.78.200 weight=2;
server xxxx backup; #用于预留的备用机器,当其他机器都宕机,则负载到这里
server xxxx down;表示该服务区宕机,不参与负载
}
6.2.3 ip_hash负载均衡
upstream web_server{
ip_hash; #用于指明当前负载方式为hash负载
server 192.168.78.128; # hash负载方式不支持权重
server 192.168.78.200;
# hash负载方式不支持backup备用机
server xxxx down;表示该服务区宕机,不参与负载
}
6.2.4 第三方模块方式
例如使用fair方式,按照Web服务器的响应时间实现负载均衡
注:如果安装第三方模块,需要安装组件后重新对nginx进行编译按安装
1)下载nginx-upstream-fair-master.zip,并解压
unzip nginx-upstream-fair-master.zip
2)进入之前的nginx文件夹
cd nginx-1.20.1
3)加入配置
./configure --add-module=/usr/local/nginx/nginx-upstream-fair
4)重新编译
make && make install
配置nginx,加入fair
upstream web_server{
server 192.168.78.128;
server 192.168.78.200;
fair;
}