文章目录

  • 一、nginx的LAMP架构
  • 1、nginx并发优化
  • 2、反向代理和负载均衡
  • (1)、默认轮询
  • (2)、权重轮询
  • (3)、ip_hash
  • (4)、备用机
  • 3、nginx平滑升级
  • 4、nginx版本回退
  • 5、nginx限流
  • (1)、控制单IP并发连接数
  • (2)、限制请求数和速度
  • (3)、排队
  • (4)、无延迟
  • (5)、限制带宽
  • 5、nginx配置管理
  • (1)、自动索引
  • (2)、Nginx expire缓存配置
  • (3)、日志轮询
  • (4)、中文乱码
  • 6、nginx重定向
  • (1)、防止域名恶意解析到服务器ip
  • (2)、重定向域名
  • (3)、重定向端口
  • (3)、虚拟机重定向
  • a、www.westos.org 重定向bbs.westos.org
  • b、bbs.westos.com定向到www.westos.com/bbs
  • 7、nginx防盗链


一、nginx的LAMP架构

1、nginx并发优化

cd /usr/local/nginx/conf
vim nginx.conf

nginx.conf参数意义

参数

意义

worker_processes 2

worker进程开启,最多开启8个

worker_cpu_affinity 01 10;

cpu有多少个核,就有几位数,1代表内核开启,0代表内核关闭

multi_accept on;

告诉nginx收到一个新连接通知后接受尽可能多的连接

use epoll;

使用epoll模型

开启文件高效传输模式,同时设置tcp_nopush 和tcp_nodelay 为on,可以防止网路和磁盘IO阻塞

sendfile on;tcp_nopush on; tcp_nodelay on;

2、反向代理和负载均衡

(1)、默认轮询

补充:

使用nginx配置代理的时候,肯定是要用到http_proxy模块。这个模块也是在安装nginx的时候默认安装。它的作用就是将请求转发到相应的服务器。

当nginx做反向代理的时候,nginx采用HTTP/1.1协议和客户端进行通信。使用HTTP/1.0协议和后端,也就是被代理的服务器进行通信。

在配置反向代理的时候,只要配置上这个参数就能完成反向代理的功能,其余的参数结合自己的实际情况去添加,不添加也可以。

字段:proxy_pass URL

proxy_pass 后边配置ip地址也可以,配置域名也可以,当然是代理服务器必须能够访问后端服务器。

此参数要配置在location里边。
cd /usr/local/nginx/conf/
vim nginx.conf

http {
        upstream westos {
				server 172.25.76.2:80;
                server 172.25.76.3:80;
                }
    include       mime.types;
    default_type  application/octet

server {
                listen 80;
                server_name www.westos.com
                location / {
						proxy_pass http://westos;
					}
nginx -t
nginx -s reload

修改vm2和vm3的发布文件内容,方便后续测试查看实验效果

cd /usr/local/nginx/html
echo vm2 > index.html
curl localhost
vm2

在真机修改域名的地址解析

vim /etc/hosts
172.25.76.1		www.westos.com

nginx必须配置dns nginx如何配置dns解析_运维


在真机测试curl www.westos.com发现vm2和vm3出现的频率为1:1

nginx必须配置dns nginx如何配置dns解析_nginx必须配置dns_02

(2)、权重轮询
cd /usr/local/nginx/conf
vim nginx.conf
为两台轮询主机设置权重
nginx -t
nginx -s reload

nginx必须配置dns nginx如何配置dns解析_运维_03

真机测试

for i in {1..10} ;do curl www.westos.com ; done

nginx必须配置dns nginx如何配置dns解析_vim_04

(3)、ip_hash
ip_hash;
nginx -t
nginx -s reload

nginx必须配置dns nginx如何配置dns解析_nginx必须配置dns_05

nginx必须配置dns nginx如何配置dns解析_运维_06

nginx必须配置dns nginx如何配置dns解析_nginx_07

(4)、备用机
vim /usr/local/nginx/conf/nginx.conf
#ip_hash;
server localhost backup;
server 172.25.76.2:80 weight=4;
server 172.25.76.3:80;

nginx -t
nginx -s reload

nginx必须配置dns nginx如何配置dns解析_运维_08

停掉vm2和vm3的nginx服务,在真机访问www.westos.com

nginx必须配置dns nginx如何配置dns解析_运维_09

当有一台主机nginx服务时,备用主机将不会被启用。这里启动了vm2的nginx服务

nginx必须配置dns nginx如何配置dns解析_nginx_10

3、nginx平滑升级

下载nginx新版本软件,正常执行./configure 和make 但不要执行make install
备份原程序

cd /usr/local/lnmp/nginx/sbin	
cp nginx nginx.old
cd auto/
cd cc/
vim gcc
注释掉该行
CFLAGS="$CFLAGS -g"

nginx必须配置dns nginx如何配置dns解析_memcached_11

nginx必须配置dns nginx如何配置dns解析_nginx必须配置dns_12

nginx必须配置dns nginx如何配置dns解析_nginx_13

备份旧版本的文件

nginx必须配置dns nginx如何配置dns解析_memcached_14


ps ax | grep nnginx查看nginx进程

nginx必须配置dns nginx如何配置dns解析_运维_15

升级新程序

kill -USR2 master进程

kill -USR2杀掉master进程

关闭原worker进程但保留主进程:为了回退

nginx必须配置dns nginx如何配置dns解析_nginx_16

kill -WINCH 主进程 查看新进程

nginx必须配置dns nginx如何配置dns解析_nginx_17

cuel -I localhost或nginx -v查看当前运行的nginx 版本号

nginx必须配置dns nginx如何配置dns解析_vim_18

4、nginx版本回退

cp -f nginx.old nginx	还原nginx程序
kill -HUP old process	唤醒原进程
kill -WINCH new process	回收新版本的worker进程	
kill -QUIT new process	关闭新版本主进程

5、nginx限流

实验素材准备:

nginx必须配置dns nginx如何配置dns解析_nginx_19

实验前的对照组测试,在真机进行测试

ab -c10 -n 10 http://172.25.76.1/download/vim.jpg

nginx必须配置dns nginx如何配置dns解析_vim_20

(1)、控制单IP并发连接数

在vm1修改nginx配置文件,检测语法,重启服务

cd /usr/local/nginx/conf/
vim nginx.conf

http {
limit_conn_zone $binary_remote_addr zone=addr:10m; 
#$binary_remote_addr 表示通过remote_addr这个标识来做限制
#zone=addr:10m 表示生成一个大小为10M,名字为addr的内存区域
...
server {
location /download/ {
    limit_conn addr 1;		#限制并发数
    limit_rate 50k;			#限制带宽
   }
}

nginx必须配置dns nginx如何配置dns解析_vim_21

在真机测试,由于被设置了限流,有部分请求被拒绝

nginx必须配置dns nginx如何配置dns解析_memcached_22

(2)、限制请求数和速度
限制单位时间内的请求数目,以及速度限制:
http {
limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;
#rate=1r/s表示允许相同标识的客户端的访问频次,这里限制的是每秒1次
...
server {
location / {
       limit_req zone=one;
#	 limit_req zone=one burst=5
#	 limit_req zone=one burst=5 nodelay;
}
}

nginx必须配置dns nginx如何配置dns解析_memcached_23

在真机测试

ab -c1 -n 10 http://download/vim.jpg

nginx必须配置dns nginx如何配置dns解析_memcached_24

(3)、排队

超过指定访问数量则排队访问

cd /use/local/nginx/conf
vim nginx.conf
location /download {
	limit_conn addr 1;
	limit_req zone=one burst=5;
	#设置一次访问5个。超过的排队等待。之前的时实验设定为一秒通过一个请求因此-n 10共会访问两次。访问时间为10秒左右
nginx -t
nginx -s reload

nginx必须配置dns nginx如何配置dns解析_vim_25

在排队等待时会出现等待的感觉(这种感觉不太好受哈哈哈哈)

nginx必须配置dns nginx如何配置dns解析_memcached_26

最终用时9。002秒,10个请求全部通过

nginx必须配置dns nginx如何配置dns解析_运维_27

(4)、无延迟

如果请求通过需要等待很长时间会直接影响用户体验或时工作效率,因此须要时应当设置对所有请求无延迟

cd /use/local/nginx/conf
vim nginx.conf
---
	location /download {
		imit_conn addr 1;
		limit_req zone=one burst=5 nodelay;
			}
---
nginx -t
nginx -s reload

真机测试

nginx必须配置dns nginx如何配置dns解析_nginx必须配置dns_28

但这种无延迟时是相对的,当请求数量大到一定程度的时候,也会出现等待的情况。

(5)、限制带宽

cd /use/local/nginx/conf
vim nginx.conf
---
	location /download {
		imit_conn addr 1;
		#limit_req zone=one burst=5 nodelay;
		limit_rate 50k;
				}
---
nginx -t
nginx -s reload

限制带宽为50k,测试文件大小为444k,大致需要80s左右

nginx必须配置dns nginx如何配置dns解析_memcached_29


nginx必须配置dns nginx如何配置dns解析_nginx_30

5、nginx配置管理

(1)、自动索引

下载方便

location / {
    autoindex on;
}

nginx必须配置dns nginx如何配置dns解析_运维_31

nginx必须配置dns nginx如何配置dns解析_nginx_32

(2)、Nginx expire缓存配置

缓存可以降低网站带宽,加速用户访问

location ~ .*\.(gif|jpg|png)$ {
    expires 365d;
    root /www;
}

nginx必须配置dns nginx如何配置dns解析_vim_33

curl命令访问素材文件,发现文件可以缓存到2022年(即一年之后)

nginx必须配置dns nginx如何配置dns解析_memcached_34

(3)、日志轮询
cd /opt/
ls
cat nginx.sh
chmod +x nginx.sh
./nginx.sh
cd /use/local/nginx/logs/
ls
access_2021-09-25.log

nginx必须配置dns nginx如何配置dns解析_nginx必须配置dns_35

给脚本执行权限,执行脚本,切入到日志目录,查看生成的日志文件

nginx必须配置dns nginx如何配置dns解析_memcached_36

禁用不必要的日志记录,以节省磁盘IO的消耗

location ~ .*\.(js|jpg|jpeg|png|css|bmp|gif)$ {
	access_log off;
}

        location /status {
                stub_status on;
                access_log off;
                }
nginx -t
nginx -s reload

nginx必须配置dns nginx如何配置dns解析_memcached_37


nginx必须配置dns nginx如何配置dns解析_memcached_38

nginx必须配置dns nginx如何配置dns解析_nginx必须配置dns_39


站点目录和文件的限制

location ~ ^/images/.*\.(sh|php)$ {
                deny all;
        }

除本机,其他主机不可访问该目录

nginx必须配置dns nginx如何配置dns解析_vim_40


在真机访问vm1的status目录

nginx必须配置dns nginx如何配置dns解析_nginx_41

本机访问status目录,访问成功。

nginx必须配置dns nginx如何配置dns解析_nginx_42

(4)、中文乱码
vim nginx.conf
charset utf-8;

设置中文乱码前

nginx必须配置dns nginx如何配置dns解析_运维_43


设置中文乱码后

nginx必须配置dns nginx如何配置dns解析_运维_44

6、nginx重定向

(1)、防止域名恶意解析到服务器ip
return 500

nginx必须配置dns nginx如何配置dns解析_nginx必须配置dns_45


访问本机发现500的错误

nginx必须配置dns nginx如何配置dns解析_运维_46

nginx必须配置dns nginx如何配置dns解析_运维_47

(2)、重定向域名

编辑配置文件,设定将所有访问请求重定向至指定域名

cd /use/local/nginx/conf
vim nginx.conf
---
    server {
        listen       80;
        server_name  localhost;
        rewrite ^(.*) http://www.baidu.com permanent;
---
nginx -t
nginx -s reload

nginx必须配置dns nginx如何配置dns解析_nginx_48


浏览器测试:输入172.25.76.1会跳转至www.baidu.com

nginx必须配置dns nginx如何配置dns解析_vim_49

nginx必须配置dns nginx如何配置dns解析_vim_50

(3)、重定向端口
cd /etc/pki/tls/certs
 make cert.pem	#生成证书

nginx必须配置dns nginx如何配置dns解析_vim_51

nginx必须配置dns nginx如何配置dns解析_运维_52

查看证书是否生成

nginx必须配置dns nginx如何配置dns解析_nginx必须配置dns_53

server {
        listen       443 ssl;
        server_name  www.westos.com;

        ssl_certificate      cert.pem;
        ssl_certificate_key  cert.pem;

        ssl_session_cache    shared:SSL:1m;
        ssl_session_timeout  5m;

        ssl_ciphers  HIGH:!aNULL:!MD5;
        ssl_prefer_server_ciphers  on;

        location / {
           root   html;
            index  index.html index.htm;
        }
    }

server {
        listen 80;
        server_name www.westos.com;

        rewrite ^/(.*)$ https://www.westos.com/$1 permanent;
        #location / {
        #       proxy_pass http://westos;
        #}
        }
}
---
nginx -t
nginx -s reload

浏览器测试

nginx必须配置dns nginx如何配置dns解析_nginx_54


curl语句测试

nginx必须配置dns nginx如何配置dns解析_nginx_55

(3)、虚拟机重定向
a、www.westos.org 重定向bbs.westos.org
cd ..(nginx)
cd html
mkdir bbs
vim index.html
echo bbs.wetos.com > index.html
mv bbs/ / 	#移动到根目录
vim nginx.conf
///
server {    
        listen 80;
        server_name www.westos.com;
        
        #rewrite ^/(.*)$ https://www.westos.com/$1 permanent;
        rewrite ^/bbs$ http://bbs.westos.com permanent;
        rewrite ^/(.*)$ http://bbs.westos.com/$1 permanent;
     
        #location / {
        #       proxy_pass http://westos;
        #       }
        }
server {
        listen 80;
        server_name bbs.westos.com;

        location / {
                root /bbs;
        index index.html;
                }
        }
///
nginx -s reload

nginx必须配置dns nginx如何配置dns解析_memcached_56

b、bbs.westos.com定向到www.westos.com/bbs

nginx必须配置dns nginx如何配置dns解析_nginx_57


nginx必须配置dns nginx如何配置dns解析_vim_58

7、nginx防盗链

盗窃主机vm2: 172.25.76.2
防盗主机vm1: 172.25.76.1
实验效果:
盗窃主机vm2不可以访问vm1上的图片,且会访问到404或者禁止盗链的图片

在vm2中发布目录编写html文件

nginx必须配置dns nginx如何配置dns解析_nginx必须配置dns_59

浏览器访问172.25.76.2,出现vim.jpg图片

nginx必须配置dns nginx如何配置dns解析_memcached_60

修改vm1的nginx配置文件,添加防盗链配置

nginx必须配置dns nginx如何配置dns解析_nginx_61


浏览器访问vm2发现图片无法访问

nginx必须配置dns nginx如何配置dns解析_vim_62

再修改配置文件,重定向到防盗图片

nginx必须配置dns nginx如何配置dns解析_vim_63

差一张图,妹做出来