Nginx

目录

一.Nginx的意义:

二.Nginx的安装:

三.在server1主机中创建一个nginx用户

四.将服务部署到server2与server3

五.建立软链接以便全局使用nginx

六.Nginx实验:

一.并发优化

二.nginx反向代理+均衡负载

1.默认轮询

2.改变默认权重,默认为1

3、ip_hash 

4.备用机

三、平滑升级与平滑回退 

1.平滑升级

2.版本回退

四、算法扩展 

1.如果要对nginx进行扩展,先将sticky注释掉,并停止服务。 

2.下载sticky软件包,然后解压软件包,安装解压软件并解压sticky软件包

3.进入nginx目录,清理缓存,执行configure->make

4.将nginx复制到sbin并覆盖,切入配置目录,编辑配置文件,取消对sticky的注释并检测语法,但是此时sticky模块会与backup冲突,所以还是检测失败 

5.将之前的设定注释或删掉,重新检测语法,并开启服务

五 .nginx限流

1.限制并发连接数

2.限制每秒连接次数

3.排队,超过指定数量则排队访问

4.无延迟

5.限制带宽

 六.nginx配置管理

1.自动索引

2.nginx expire 缓存配置

3.日志轮询

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

5.站点目录和文件的限制 

6.中文乱码 

七.nginx 重定向 

1.防止域名恶意解析到服务器IP

2.端口重定向

3.虚拟主机重定向

八.防盗链 

1.配置server2盗链主机

2.此时通过浏览器访问172.25.32.2可以访问到server1的图片

3.在server1 加入防盗链,重新启动nginx 

4.此时不能通过server2的服务访问到server1的资源 

5.也可以通过重定向让盗链指向其他资源


一.Nginx的意义:

Nginx (engine x) 是一个高性能的HTTP反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务。

二.Nginx的安装:

1.准备Nginx安装包

2.解压并安装

 tar zxf nginx-1.20.1.tar.gz

关闭debug,取消gcc编译

 在 server1 安装模块

./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-threads --with-file-aio --with-http_ssl_module 

 首次安装会失败

 需要我们安装gcc编译器

第二次安装失败

 安装yum install pcre-devel -y

 第三次安装失败

 安装yum install openssl-devel -y

最后一次模块安装成功

然后编译并安装部署

​ 

 安装成功

三.在server1主机中创建一个nginx用户

useradd -d /usr/local/nginx/ -M -s /sbin/nologin nginx

四.将服务部署到server2与server3

scp -r /usr/local/nginx server2:/usr/local/
scp -r /usr/local/nginx server3:/usr/local/

五.建立软链接以便全局使用nginx

 

ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/

六.Nginx实验:

一.并发优化

ulimit -a 可以查看用户可以打开文件的限制	        ##open files
sysctl -a | grep file				##打开文件的限制
///fs.file-max = 183593
free -m

二.nginx反向代理+均衡负载

1.默认轮询

 只在http中添加以及最后添加一个server模块

 

nginx -t检测语法,nginx -s reload 重启服务

 在真机中做域名解析

然后分别在server2和server3中设置配置

 

最后用真机充当测试机器, curl www.westos1.com

2.改变默认权重,默认为1

可以发现server2的轮询次数较多

3、ip_hash 

ip_hash对后端做健康检测,加入一台机器出现问题,就会调用其它机器
(server2 nginx -s stop)
如果后端下线,则http报错502(500表示服务器错误)
在server1主机中修改配置文件,在负载均衡模块中添加ip_hash,检测语法,重启服务。

 我们修改server的配置文件后检测语法然后重启

然后关闭server的nginx

然后用真机进行测试

4.备用机

当我们所有后端主机都出现问题时,备用机可以暂时的接管进行运行,但不是长久之计,需要及时修理后端服务器。

我们在server机器中将本机作为负载均衡器的备机,修改配置文件后检测与法重启服务,并且输入报错提示信息

 然后我们停止server2和server3的nginx服务

[root@server2 ~]# nginx -s stop
[root@server3 ~]# nginx -s stop

 最后我们用真机访问502错误,当后端主机恢复,就不会访问备用机

三、平滑升级与平滑回退 

1.平滑升级

1.首先我们检查以下当前版本

 2.下载新版本:http://nginx.org/en/download.html

然后解压,编译

注意:不能makeinstall

3.将新版本的nginx.conf配置修改到旧版本的配置 

4.make之后备份旧程序,并拷贝新程序

5. 获取当前nginx主进程pid,也就是master进程。然后开启新版本,关闭worker进程但保留主进程master

ps ax | grep nginx          ##获取当前nginx主进程pid,即master进程
kill -USR2 PID              ##开启新版本
ps ax | grep nginx
curl localhost -I           ##显示新版本号
kill -WINCH PID             ##关闭worker进程但保留主进程

2.版本回退

如果新版本中有存在些许问题,我们也可以进行版本回退

回退的过程与更新相反,先还原nginx程序,唤醒旧进程,退出并关闭新版本
cd /usr/local/nginx/sbin/
ls
\cp -f nginx.old nginx		        ##还原nginx程序
kill -HUP PID			        ##唤醒原进程
ps ax | grep nginx
kill -WINCH PID			        ##回收新版本的worker进程
kill -QUIT PID				##关闭新版本主进程
ps ax | grep nginx
curl localhost -I

四、算法扩展 

nginx并不支持一些算法,当我们需要使用时,则需要进行扩展。比如sticky模块,nginx本身不支持,当在配置文件中写入并调用时,会报错

1.如果要对nginx进行扩展,先将sticky注释掉,并停止服务。 

 

 2.下载sticky软件包,然后解压软件包,安装解压软件并解压sticky软件包

 3.进入nginx目录,清理缓存,执行configure->make

 

cd nginx-1.20.1/

make clean		##清理缓存

./configure --prefix=/usr/local/nginx --with-http_ssl_module --with-http_stub_status_module --with-threads --with-file-aio --add-module=/root/nginx-goodies-nginx-sticky-module-ng-08a395c66e42

make

4.将nginx复制到sbin并覆盖,切入配置目录,编辑配置文件,取消对sticky的注释并检测语法,但是此时sticky模块会与backup冲突,所以还是检测失败 

5.将之前的设定注释或删掉,重新检测语法,并开启服务

五 .nginx限流

准备一张照片

1.限制并发连接数

在真实主机进行压力测试:ab -c10 -n 10 http://172.25.32.1/download/1

显示失败次数为0

 

在server1主机中设定访问下载链接时,受到控制,重启服务

重新在真机执行压力测试,因为被限流,所以有部分请求被拒绝

 2.限制每秒连接次数

 真机中压力测试,因为设置的每秒接受一次请求,所以会有9次错误

 3.排队,超过指定数量则排队访问

1.在配置文件中设定一次访问5个,超过的排队等待,因为上一个实验设定每秒通过1个请求,则访问2次,差不多10秒。

 2.在真机中测试压力,大约5S之后会出现测试值

 4.无延迟

 在真机中进行压力测试,大约会错误一半

5.限制带宽

为了更好的使得服务器告诉运行,我们有时候会限制带宽

我们在配置文件中设定带宽50k,重启服务,注释掉上面实验的参数

 限制带宽为50k,图片大小为444k,访问时间大约需要80s

 六.nginx配置管理

1.自动索引

作用:时我们可以在浏览器访问,下载更方便

在配置文件中设定自动索引,注意注释上文参数设定,重启服务

 然后使用浏览器访问

 2.nginx expire 缓存配置

缓存可以降低网站带宽,加速用户访问。
编辑配置文件,设定对图片等进行缓存,缓存时间为1年,在此期间访问就会减少访问时间

在真机中输入多输入两次 curl -I 172.25.32.1/download/2.jpg,可以看到缓存到2022年

 3.日志轮询

cd /opt/    ##第三方软件安装位置
vim nginx.sh
写入:
#!/bin/bash
cd /usr/local/nginx/logs && mv access.log access_$(date +%F -d -1day).log
kill -USR1 `cat /usr/local/nginx/logs/nginx.pid`

chmod +x nginx.sh
./nginx.sh
cd /usr/local/nginx/logs/
ls查看
有access_2021-09-09.log文件存在

 

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

在原有的基础上加入:

        location /status {
                stub_status on;
                access_log off;
        }

 检查语法并且重启服务,然后在浏览器中访问该目录,在日志目录中不会生成日志记录

5.站点目录和文件的限制 

在配置文件中设定指定目录只能本机访问,拒绝其他所有请求

 检测与法然后重启服务,然后用真机访问status目录时,拒绝访问,报错403,(403的意思为:资源不可用,服务器理解客户的请求,但拒绝处理)

 然后用本机进行测试就是可以的

6.中文乱码 

nginx默认不支持中文字符,在浏览器访问时,中文会变成乱码,在nginx发布文件中加入一行中文,在浏览器中试访问为乱码

​ 

        但我们在server1本机中,可以使用curl命令查看本地的发布文件,是可以正常显示中文的,编辑配置文件,设定nginx支持中文字符,并重启服务

    server {
        listen       80;
        server_name  localhost;

        charset utf-8;
    ##多加入一行 charset utf-8;

检测语法之后重启服务,如果重新访问的仍是中文乱码,在清理浏览器缓存之后访问即可。

七.nginx 重定向 

1.防止域名恶意解析到服务器IP

1.拒绝访问,报错500

vim /usr/local/nginx/conf/nginx.conf   
   server {
        listen       80;
        server_name  localhost;
        return 500;
        charset utf-8;

    ##只添加了return 500;

 然后用server主机进行测试

2.将所有访问重定向至指定域名 

    server {
        listen       80;
        server_name  localhost;
        #return 500;
        rewrite ^(.*) http://www.linux.com permanent;
        charset utf-8;
    ##只需添加rewrite ^(.*) http://www.linux.com permanent;

​ 

然后用浏览器访问server的ip,自动定向到www.linux.com

2.端口重定向

由于443是 https 使用,所以先制作一个加密证书,并移动到配置目录中,编辑配置文件,将80端口定向到443端口,检测语法,重启服务,查询端口

cd /etc/pki/tls/certs/
 make cert.pem    ##创建证书
mv cert.pem /usr/local/nginx/conf/

 

 在最后添加

    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;
        #        }
        }

 

 然后进行测试

 

 在浏览器中输入172.25.32.1自动切换到www.westos.com中

3.虚拟主机重定向

1.将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;
                }
        }

然后在真机使用curl命令可以查看,浏览器输入www.westos.org会自动跳转为bbs.westos.org ,注意作好地址解析

 

2.bbs.westos.org 重定向www.westos.org 

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;
        #                #        }
        #                        }
        if ($host = "bbs.westos.com") {
                rewrite ^/(.*)$ http://www.westos.com/bbs/$1 permanent;
        }

}
#server {        ##全部注释掉
#        listen 80;
#        server_name bbs.westos.com;
#
#       location / {
#               root /bbs;
#        index index.html;
#                }
#        }

检测语法重启服务,然后用真机进行测试 curl -I bbs.westos.com

​ 

八.防盗链 

实验素材:

我们假设server1主机为防盗主机,server2主机为盗链主机,然后为在我们的server1当中/usr/local/nginx/html下建立一个目录download目录内下载一张图片,盗链这张图片

 1.配置server2盗链主机

cd /usr/local/nginx/html
vim index.html

<html>

<body>
<br>server2</br>
<img src="http://www.westos.com/download/2.jpg">
</body>

</html>

​ 

 2.此时通过浏览器访问172.25.32.2可以访问到server1的图片

3.在server1 加入防盗链,重新启动nginx 

给最后server模块中加入

location ~* \.(gif|jpg|png)$ {
                valid_referers none blocked www.westos.com;
                if ($invalid_referer) {
                        return 403;
                }
        }

4.此时不能通过server2的服务访问到server1的资源 

 5.也可以通过重定向让盗链指向其他资源

将图片定向到防止盗链的图片,从而展示给想要盗链图片的人看

然后通过server访问

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值