官网参考文档: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 //查看当前防火墙状态

  1. # 进入到sbin文件夹中执行以下命令
  2. ./nginx
  3. # 以指定配置开启服务
  4. ./nginx -c 配置文件路径/配置文件

1.2 关闭服务

  1. # 进入到sbin文件夹中,执行以下命令
  2. ./nginx -s stop
  3. 如果想要等待当前任务执行完毕后再停止服务
  4. ./nginx -s quit
  5. 也可以通过kill PID来杀死Nginx进程

1.3 重启服务

  1. #重新加载配置文件(平滑重启)
  2. nginx -s reload

1.4 给Nginx添加链接

添加链接后,就能在任何地方使用Nginx命令来进行操作了

  1. 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配置文件的结构

image.png

2.3 默认配置指令

image.png

2.4 Nginx中用户和组

2.5 自定义错误页

常见的几种配置方式

  1. errr_page 500 502 503 504 /50x.html ;
  2. #指定网站极目呆下的页商 40x.html ,处琦 403 错误
  3. errr_page 403 /40x.html ;
  4. #指定网站根目录下的网片 404 间,处理 404 错误
  5. error_page 404 /404.jpg;

其他配置方式

  1. #可以修改状态码
  2. err r_page 404 =200 /404.html ;

2.6 root和alias的区别

image.png

2.7 配置文件分离

当一个Nginx服务器可运行多个虚拟主机,如果讲所有虚拟主机的配置全部放在nginx.conf文件中,则会造成nginx.conf文件过大,可以通过include指令讲配置文件进行分离后引入
第一步:新建配置文件zsf.nginx.conf,输入以下内容

  1. server{
  2. listen 8081;
  3. server_name 127.0.0.1
  4. location / {
  5. root /dist #静态资源配置路径
  6. index index.html index.htm
  7. }
  8. }

第二步:修改nginx.conf

  1. http {
  2. include zsf.nginx.conf # 用于引入配置文件
  3. #log_format log_template '[ip:]$remote_addr [time:]$time_local [user_agent:]"$http_user_agent"';
  4. #access_log logs/access.log log_template buffer=2k flush=5s;
  5. access_log off;
  6. ....
  7. }

3. 安全策略-访问控制

3.1 权限控制-限制ip访问

权限控制指令allow/deny,在使用时,权限指令只需要跟上允许或禁止的IP、IP段或all即可

  1. location / {
  2. root html;
  3. index index.html index.htm;
  4. error_page 500 502 503 504 /50x.html;
  5. allow 36.106.64.152; #设置访问nginx服务器允许的ip地址 注:上面的会覆盖下面的,里面的会覆盖外面的
  6. deny all; #设置不允许访问nginx服务器的ip地址
  7. }

3.2 权限控制-限制资源访问

使用location进行资源访问的限制,location的语法如下:

  1. location [=|~|~*|^~]URI {
  2. }
  3. 或者
  4. location @name {
  5. }

image.png
location分为普通location和正则location
1) 对于正则location符合先定义先执行
2) 对于普通location符合最大前缀匹配原则
3) 当正则location和普通location同时存在时,如果正则location匹配成功,则不会再执行普通location,即优先执行正则匹配,再执行普通匹配
禁用正则匹配
1) 利用 =精准匹配或^~非正则匹配可以在正则匹配之前优先匹配,从而禁止执行原有的正则匹配

3.3 显示其他路径下文件

Nginx默认是不允许列出整个列表的,所以,当用于访问某一站点或目录,切该站点或目录下没有index指令设置的默认索引文件,例如index.html,就会报403forbbiden错误

  1. #Nginx中开启文件列表访问功能,可以配置在http下,也可以具体配置在server中
  2. autoindex on;
  3. #显示文件大小
  4. autoindex_exact_size off;
  5. #显示文件最后一次修改时间
  6. autoindex_localtime on;

效果图如下
image.png

4. 日志归集

每日定时收集nginx日志,并按日期进行分类

4.1 创建脚本

  1. #!/bin/bash
  2. #当前Nginx日志文件存放的目录
  3. logs_path="/home/user01/nginx-1.20.0/logs/"
  4. #备份日志文件
  5. mv $logs_path/access.log $logs_path/`date -d yesterday+"%Y%m%d"`.log
  6. #重新生成今天的日志
  7. sudo /home/user01/nginx-1.20.0/sbin/nginx -s reopen

4.2 为脚本设置可执行权限

  1. chmod +w autolog.sh

4.3 配置自动备份

  1. # Step1:输入以下命令
  2. crontab -e
  3. # Step2:按照如下格式添加一条数据
  4. 0 0 * * * /usr/local/nginx/logs/192.168.78.3/autolog.sh > /dev/null 2>&1
  5. 补充:
  6. crontab -l #查看当前crontab文件的内容
  7. crontab -r #删除设置的任务计划

5. 配置主机

5.1 基于listen配置虚拟主机

每一个server都是一个主机
访问虚拟主机的方式:
1) 通过配置listen设置开放端口
2) 通过配置server_name设置虚拟主机IP/域名
当设置完以后,这个server就是这台服务器上的一台虚拟主机(注,当前实现的功能类似于静态资源服务器,并不具有代理功能)

  1. server {
  2. listen 80; # 监听端口
  3. # server_name ''; # 设置主机域名
  4. location / {
  5. root html; # 设置主机站点根目录地址
  6. index index.html index.htm; # 设置默认索引文件
  7. error_page 500 502 503 504 /50x.html; #设置默认错误页面
  8. allow all;
  9. #deny all;
  10. }
  11. }

5.2 基于server_name配置虚拟主机

注:server_name支持通配符匹配和正则匹配

5.2.1 方式一:设置IP别名

第一步:通过配置文件方式设置IP别名

  1. 1)修改网络配置文件
  2. cd /etc/sysconfig/network-scripts/
  3. 2)复制网络配置文件
  4. cp ifcfg-eth0 ifcfg-eth0:1
  5. cp ifcfg-eth0 ifcfg-eth0:2
  6. 3)修改复制好的配置文件
  7. DEVICE=eth0:1
  8. IPADDR=新IP1

或通过ifconfig和route命令设置IP别名

  1. ifconfig eth0:1 192.168.78.4 broadcast 192.168.78.255 netmask 255.255.255.0 up
  2. route add -host 192.168.78.4 dev eth0:1
  3. 补充:设置开启启动执行上面两条命令:
  4. vi /etc/rc.local 在文件末尾添加上面两条命令

第二步:配置nginx

  1. # nginx监听192.168.78.3
  2. server {
  3. listen 80; # 监听端口
  4. server_name 192.168.78.3; # 设置主机域名
  5. location / {
  6. root html; # 设置主机站点根目录地址
  7. index index.html index.htm; # 设置默认索引文件
  8. error_page 500 502 503 504 /50x.html; #设置默认错误页面
  9. allow all;
  10. #deny all;
  11. }
  12. }
  13. # nginx监听192.168.78.4
  14. server {
  15. listen 80; # 监听端口
  16. server_name 192.168.78.4; # 设置主机域名
  17. location / {
  18. root html; # 设置主机站点根目录地址
  19. index index.html index.htm; # 设置默认索引文件
  20. error_page 500 502 503 504 /50x.html; #设置默认错误页面
  21. allow all;
  22. #deny all;
  23. }
  24. }

5.2.2 方式二:基于域名配置虚拟主机

第一步:修改hosts文件,实现网站的域名访问

  1. vi /etc/hosts
  2. 添加以下内容
  3. 127.0.0.1 www.ng.test
  4. 127.0.0.1 ng.test

第二步:配置nginx

  1. # nginx监听www.ng.test
  2. server {
  3. listen 80; # 监听端口
  4. server_name www.ng.test; # 设置主机域名
  5. location / {
  6. root html; # 设置主机站点根目录地址
  7. index index.html index.htm; # 设置默认索引文件
  8. error_page 500 502 503 504 /50x.html; #设置默认错误页面
  9. allow all;
  10. #deny all;
  11. }
  12. }
  13. # nginx监听192.168.78.4
  14. server {
  15. listen 80; # 监听端口
  16. server_name ng.test; # 设置主机域名
  17. location / {
  18. root html; # 设置主机站点根目录地址
  19. index index.html index.htm; # 设置默认索引文件
  20. error_page 500 502 503 504 /50x.html; #设置默认错误页面
  21. allow all;
  22. #deny all;
  23. }
  24. }

6. 反向代理、负载均衡、缓存

补充:正向代理和反向代理的区别
正向代理是为了解决客户端无法访问目的主机的情况下,通过正向代理去获取资源
反向代理可以用于隐藏资源真正的服务器地址,提高安全性
即反向代理主要考虑的是安全性问题,正向代理主要考虑的是无法访问的问题

6.1 反向代理

nginx中设置反向代理的方法:通过proxy_pass命令进行设置

  1. server {
  2. listen 80; # 监听端口
  3. server_name ''; # 设置主机域名
  4. location / {
  5. proxy_pass http://111.163.123.68;
  6. proxy_set_header Host 111.163.123.68:8801;
  7. }
  8. }

image.png

  1. location / {
  2. proxy_pass http://192.168.78.200;
  3. proxy_set_header Host $host;
  4. proxy_set_header X-Real-IP $remote_addr;
  5. proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  6. }

6.2 负载均衡

upstream命令实现负载均衡
image.png

6.2.1 轮询方式

  1. upstream web_server{
  2. server 192.168.78.128;
  3. server 192.168.78.200;
  4. #server xxxx backup; #用于预留的备用机器,当其他机器都宕机,则负载到这里
  5. #server xxxx down;表示该服务区宕机,不参与负载
  6. }

6.2.2 权重方式

  1. upstream web_server{
  2. server 192.168.78.128 weight=1;
  3. server 192.168.78.200 weight=2;
  4. server xxxx backup; #用于预留的备用机器,当其他机器都宕机,则负载到这里
  5. server xxxx down;表示该服务区宕机,不参与负载
  6. }

6.2.3 ip_hash负载均衡

  1. upstream web_server{
  2. ip_hash; #用于指明当前负载方式为hash负载
  3. server 192.168.78.128; # hash负载方式不支持权重
  4. server 192.168.78.200;
  5. # hash负载方式不支持backup备用机
  6. server xxxx down;表示该服务区宕机,不参与负载
  7. }

6.2.4 第三方模块方式

例如使用fair方式,按照Web服务器的响应时间实现负载均衡
注:如果安装第三方模块,需要安装组件后重新对nginx进行编译按安装

  1. 1)下载nginx-upstream-fair-master.zip,并解压
  2. unzip nginx-upstream-fair-master.zip
  3. 2)进入之前的nginx文件夹
  4. cd nginx-1.20.1
  5. 3)加入配置
  6. ./configure --add-module=/usr/local/nginx/nginx-upstream-fair
  7. 4)重新编译
  8. make && make install

配置nginx,加入fair

  1. upstream web_server{
  2. server 192.168.78.128;
  3. server 192.168.78.200;
  4. fair;
  5. }

6.3 缓存配置

7. nginx的模块配置

8. 高可用负载均衡集群