linux企业级运维----->nginx相关部署

9 篇文章 0 订阅

目录

一、并发优化

开启nginx,进一步对nginx进行配置,新建nginx用户,对该用户进行配置,重启服务

nginx#开启服务
cd /usr/local/nginx/conf/
useradd -d /usr/local/nginx/ -M -s /sbin/nologin nginx
vim nginx.conf
```
user  nginx;
worker_processes  auto;#并发数由1修改为自动并发
events {
    worker_connections  65535;#允许访问量为65535
}
```
cd /etc/pam.d/
vim /etc/security/limits.conf
```
nginx - nofile 65536#在最后一行添加,最大访问数量为65536
```
nginx -s reload#重启服务

在这里插入图片描述在这里插入图片描述
在这里插入图片描述

二、负载均衡+反向代理

1、默认轮询

#打开server1之外另外两台虚拟机server2,server3
#在server1上做f负载均衡和反向代理,检测语法,重启服务
#将server1中配好的nginx复制到server2和server3中
cd /usr/local/nginx/conf/
vim nginx.conf#编辑配置文件
---------------
http {
        upstream westos {  #upstream负载均衡器
        server 172.25.75.2:80;
        server 172.25.75.3:80;
        }
    include       mime.types;
    default_type  application/octet-stream;
server {
        listen 80;
        server_name www.westos.org;

        location / {
                proxy_pass http://westos;
                }
        }
 }#注意与http后大括号配对
--------------
nginx -t#
nginx -s reload
cd ..
cd ..#切换到/usr/local目录下
scp -r nginx/ server2:/usr/local#在local目录下将server1配置好的nginx复制到server2和server3主机

在这里插入图片描述在这里插入图片描述
在这里插入图片描述在server2和server3中建立软连接以便全局使用nginx,编辑配置文件,将server1中的设定修改回默认值,写入发布文件,并尝试是否能够访问

 ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/
 useradd nginx#建立nginx用户
 cd /usr/local/nginx/sbin/
 ls--->nginx
 cd ..
 cd conf/
 vim nginx.conf
 ------------------------
  2 #user  nginx;#注释掉
  3 worker_processes  auto;
 12 events {
 13     worker_connections  1024;#原来为65535修改回1024
 14 }
-------------------------
nginx -t#进行语法检测
cd ..
cd html/#切换到/usr/local/nginx/html
ls----->index.html
echo server2 > index.html
nginx#开启nginx
#当出现80端口已经被占用时,ps ax | grep nginx查看进程
#kill 进程号    关闭进程再重新启动
curl localhost

在这里插入图片描述在这里插入图片描述
在这里插入图片描述在这里插入图片描述
在真机中进行地址解析,ping通www.westos.org后就可以使用curl命令查看server主机的发布文件。(如果此时报错显示502可查看服务器火墙是否关闭,没有则关闭火墙重新curl)
在这里插入图片描述nginx能够对后端进行健康检测,如果server3出现问题,则调度server2。如果后端服务器全部挂掉,则http报错502(550表示服务器错误)
在这里插入图片描述

2、改变权重(默认权重为1)

修改配置文件,在负载均衡器的服务后添加权重,检测语法后重启服务
在这里插入图片描述
在这里插入图片描述在真机中进行curl www.westos.org测试,server1与server2主机以权重比形式出现
在这里插入图片描述

3、ip_hash

ip_hash是根据用户请求过来的IP,然后映射成hash值,再分配到一个特定的服务企里边。使用ip_hash这种负载均衡后可以保证用户每一次的会话都会只发送到同一台服务器上,它的session不会跨越到其他的服务器上,从而解决session问题。

在server1中修改配置文件,在负载均衡器中添加ip_hash,保存后进行语法检测并重启nginx服务。
在这里插入图片描述在这里插入图片描述在这里插入图片描述在真机中测试,由于sever3已经关闭,只能访问server2
在这里插入图片描述

4、备用机

当所有后端主机都出现问题时,备用机可以暂时运行,但风险较高,需要及时修理后端服务器。
在server1的负载均衡中设定本机作为备用机,检测语法,重启服务。
在这里插入图片描述在这里插入图片描述在这里插入图片描述由于两个后端服务器都不能使用,于是显示备用机文件,当后端服务器恢复时显示后端服务器
在这里插入图片描述

三、平滑升级

1、版本升级

当服务器再运行时出现需要升级的情况,可使用平滑升级。即就是在不断开服务器的情况下进行升级,最大限度的保证数据的完整性。
再server1服务器中修改配置文件,设定工作进程数为2,安装一个比当前版本更高的nginx,重新进行编译(configure–>make—>make install)

cd /usr/local/nginx/conf/
vim nginx.conf
---------
  2 user  nginx;
  3 worker_processes  2;
  4 worker_cpu_affinity 01 10;
--------
nginx -t
nginx -s reload
cd
ls---->nginx-1.21.1.tar.gz
tar zxf nginx-1.21.1.tar.gz
cd nginx-1.21.1
./configure --prefix=/usr/local/nginx --with-http_ssl_module --with-http_stub_status_module --with-threads --with-file-aio

在这里插入图片描述在这里插入图片描述在这里插入图片描述make之后备份原程序,拷贝新程序

make 
cd objs/
ls---->
cd /usr/local/nginx/sbin/
ls--->nginx
cp nginx nginx.old#备份原程序
cd
cd nginx-1.21.1/objs/
cp -f nginx /usr/local/nginx/sbin/#拷贝新程序

在这里插入图片描述在这里插入图片描述

ps ax | grep nginx#获取当前nginx主进程pid,即master进程  可知为3195
kill -USR2 3195#开启新版本
ps ax | grep nginx
nginx -v#显示新的版本号为1.21.1

在这里插入图片描述在这里插入图片描述

2、版本回退

当有些时候我们会发现新的版本没有旧的版本使用顺手,想要退回原来版本,那么关闭worker进程但保留主进程就是为了需要时能够回退,也就是关闭工作端worker同时保留master

ps ax | grep nginx#查看进程
kill -WINCH 3195
nginx -v--->nginx/1.21.1#此时依旧显示的是新的版本号

在这里插入图片描述回退的过程与升级相反,先还原nginx程序,唤醒原程序,回收并关闭新版本

cd /usr/local/nginx/sbin/
ls---->nginx  nginx.old
cp -f nginx.old nginx#还原nginx程序
kill -HUP 3195#唤醒原程序
ps ax | grep nginx
kill -WINCH 6280#回收新版本的worker进行
kill -QUIT 6280#关闭新版本主进程
nginx -v----> nginx/#原先版本版本号隐藏

在这里插入图片描述

四、算法扩展

有时nginx不支持一些算法,语法检测时会报错。则当我们需要使用时,要进行扩展。

cd /usr/local/nginx/conf/
vim nginx.conf
-------------
upstream westos{
                sticky;
                server 172.25.75.2:80 weight=2;
                server 172.25.75.3:80;
                #ip_hash;
                server localhost:80 backup;

        }
---------------
nginx -t----->test failed#语法检测失败,因为nginx不支持sticky模块

在这里插入图片描述在这里插入图片描述
先将配置文件中的sticky注释掉,重新进行语法检测并停止nginx服务。
在这里插入图片描述在这里插入图片描述给server1复制sticky软件包

yum install unzip -y#下载zip解压软件
unzip nginx-goodies-nginx-sticky-module-ng-08a395c66e42.zip
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

在这里插入图片描述

cd objs/
cp -f nginx /usr/local/nginx/sbin
cd /usr/local/nginx/conf/
vim nginx.conf
-----------
upstream westos{
                sticky;#取消注释
                server 172.25.75.2:80 weight=2;
                server 172.25.75.3:80;
                #ip_hash;
                #server localhost:80 backup;#添加注释,不注释则会语法检测失败,因为sticy与backup冲突
------------
nginx -t#语法检测
nginx -s reload#重启nginx

在这里插入图片描述
在这里插入图片描述

五、nginx限流

在这里插入图片描述在这里插入图片描述

1、限制并发连接数

在真机中执行压力测试命令,设定并发用户数为10,请求总数为10,则完成10个,失败0个
在这里插入图片描述在server1主机中设定访问下载连接时受到控制,重启服务

cd /usr/local/nginx/conf/
vim nginx.conf
-------------------
    #gzip  on;

        limit_conn_zone $binary_remote_addr zone=addr:10m;#$binary_remote_addr通过binary_remote_addr这个标识来做限制,生成一个大小为10M名字为addr的内存区域
    server {
        listen       80;
        server_name  localhost;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
            root   html;
            index  index.html index.htm;
        }
        location /download/ {
                limit_conn addr 1;#限制并发数为1
        }
----------------------
nginx -t
nginx -s reload

在这里插入图片描述在这里插入图片描述
1个并发时所有请求全部完成,无请求失败
在这里插入图片描述超过设定的1个时出现请求失败
在这里插入图片描述

2、控制单ip的并发连接宽带(限制每秒请求数)

在真机执行压力测试,设定并发用户数为1,请求总数为10,此时请求全部通过
在这里插入图片描述

vim /usr/local/nginx/conf/nginx.conf
------------------------------
 #gzip  on;

        limit_conn_zone $binary_remote_addr zone=addr:10m;
        limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;#设定每秒只通过一个请求

    server {
        listen       80;
        server_name  localhost;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
            root   html;
            index  index.html index.htm;
        }
        location /download/ {
                limit_conn addr 1;
                limit_req zone=one;
        }
-------------------------------
nginx -t
nginx -s reload

在这里插入图片描述在真机中进行测试,只有一个请求被通过,其他被拒绝
在这里插入图片描述

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

vim /usr/local/nginx/conf/nginx.conf
--------------------------
#gzip  on;

        #limit_conn_zone $binary_remote_addr zone=addr:10m;
        limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;
...
location /download/ {
                limit_conn addr 1;
                limit_req zone=one burst=5;#设定一次访问数为5个
        }
--------------------------
nginx -t
nginx -s reload

在这里插入图片描述在真机中测试访问时长大约9秒
在这里插入图片描述

4、无延迟

vim /usr/local/nginx/conf/nginx.conf
----------------------------
 #gzip  on;

        #limit_conn_zone $binary_remote_addr zone=addr:10m;
        limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;

location /download/ {
                #limit_conn addr 1;
                limit_req zone=one burst=5 nodelay;
        }
----------------------------
nginx -t
nginx -s reload

在这里插入图片描述nodelay针对的是brust参数,brust=5 nodelay表示第一个请求到队列里的第五个请求会被立刻处理,不能延迟,后续超出(brust+1)的请求则会被拒绝。
在这里插入图片描述

5、限制带宽

通俗来讲就像我们在百度网盘中下载时会被限速,也就是限制带宽。

location /download/ {
                limit_conn addr 1;
                #limit_req zone=one burst=5 nodelay;
                limit_rate 50k;
        }
nginx -t
nginx -s reload

在这里插入图片描述
在这里插入图片描述

六、nginx配置管理

1、自动索引

vim /usr/local/nginx/conf/nginx.conf
nginx -t
nginx -s reload

在这里插入图片描述
浏览器中访问server1主机的指定目录
在这里插入图片描述

2、nginx expire缓存配置

 vim /usr/local/nginx/conf/nginx.conf
 --------------------------------
 location /download/ {
                #limit_conn addr 1;
                #limit_req zone=one burst=5 nodelay;
                #limit_rate 100k;
                autoindex on;
        }

        location ~ .*.(gif|jpg|png|pdf)$ {  #对图片进行缓存
                expires 365d;
                root html;
        }
---------------------------------
nginx -t
nginx -s reload

在这里插入图片描述
在真机中curl访问素材文件,可以看到缓存到2022年9月
在这里插入图片描述

3、日志轮询

cd 
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-28.log#生成日志

在这里插入图片描述在这里插入图片描述4、禁用不必要的日志记录,以节省磁盘IO消耗

vim /usr/local/nginx/conf/nginx.conf
----------------------------
location ~ .*.(gif|jpg|png|pdf)$ {
                expires 365d;
                root html;
        }

        location /status {
                stub_status on;
                access_log off;
        }
----------------------------
nginx -t
nginx -s reload
在浏览器访问server1的ip/status
cd /usr/local/nginx/logs
ls--->access.log
cat access.log#无记录

在这里插入图片描述在浏览器中访问ip/status目录,在日志文件中不会生成日志记录
在这里插入图片描述在这里插入图片描述

但在真机中使用curl命令访问该目录时
在这里插入图片描述在这里插入图片描述

5、站点目录和文件限制

vin /usr/local/nginx/confnginx.conf
-------------------------------
location /status {
                stub_status on;
                access_log off;
                allow 127.0.0.1;
                deny all;
        }
-------------------------------
nginx -t
nginx -s reload

在这里插入图片描述在真机中访问172.25.75.1/status目录,拒绝访问,403报错,资源不可用,服务器能读懂客户请求但拒绝
在这里插入图片描述
在server1主机上可以访问
在这里插入图片描述

6、中文乱码

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

在这里插入图片描述在浏览器中访问,中文部分属于乱码状态,但在server1中使用curl访问,可以正常显示中文
在这里插入图片描述
在这里插入图片描述

vim /usr/local/nginx/conf/nginx.conf
----------------------------
 server {
        listen       80;
        server_name  localhost;

        charset utf-8;#设定nginx支持中文字符

        #charset koi8-r;

------------------------------
nginx -t
nginx -s reload

在这里插入图片描述在这里插入图片描述在浏览器中重新访问172.25.75.1可以查看到中文显示(如果没有显示可能为浏览器缓存的影响,使用ctrl+shift+delete清理缓存)
在这里插入图片描述
在真机中对server1进行地址解析,使用curl命令时就可以看到发布文件
在这里插入图片描述

七、nginx重定向

1、拒绝域名恶意解析到服务器

(1)拒绝访问,报错500

vim /usr/local/nginx/conf/nginx.conf
--------------------------------------
server {
        listen       80;
        server_name  localhost;
        return 500;  #返回500

        charset utf-8;

        #charset koi8-r;
---------------------------------
nginx -t
nginx -s reload

在这里插入图片描述此时在server1中使用curl命令访问本机出现500报错,在浏览器中访问也会出现500报错

在这里插入图片描述在这里插入图片描述

(2)将所有访问重定向到指定域名

vim /usr/local/nginx/conf/nginx.conf
-----------------------------------
 server {
        listen       80;
        server_name  localhost;
        #return 500;
        rewrite ^(.*) http://www.westos.org permanent;#重定向到指定域名

        charset utf-8;

-----------------------------------
nginx -t
nginx -s reload

在这里插入图片描述

在这里插入图片描述在浏览器中访问172.25.75.1时会自动跳转到www.westos.org
在这里插入图片描述在这里插入图片描述

2、端口重定向

vim /usr/local/nginx/conf/nginx.conf
------------------------------
   # HTTPS server
    #
    server {
        listen       443 ssl;
        server_name  www.westos.org;

        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;
------------------------------------
cd/etc/pki
cd tls/
cd certs
make cert.pem#创建证书
CN--->Saanxi--->Xi'an--->WESTOS--->LINUX--->server1---->root@westos.org
ls
mv cert.pem /usr/local/nginx/conf/ #使nginx在重启时能够读取到
vim /usr/local/nginx/conf/nginx.conf
----------------------------
server {
        listen 80;
        server_name www.westos.org;

        rewrite ^/(.*)$ https://www.westos.org/$1 permanent;#配置原访问位置的重定向

        #location / {
        #       proxy_pass http://westos;
        #       }
        }
-----------------------------------
nginx -t
nginx -s reload

在这里插入图片描述在这里插入图片描述在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3、虚拟主机的重定向

(1)www.westos.org重定向到bbs.westos.org

cd /usr/local/nginx/html
mkdir bbs
mv bbs/ /
vim /usr/local/nginx/conf/nginx.conf
---------------------------------
server {
        listen 80;
        server_name www.westos.org;

        #rewrite ^/(.*)$ https://www.westos.org/$1 permanent;
        rewrite ^/bbs$ http://bbs.westos.org permanent;
        rewrite ^/(.*)$ http://bbs.westos.org/$1 permanent;

        #location / {
        #       proxy_pass http://westos;
        #       }
        }
server {
        listen 80;
        server_name bbs.westos.org;

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

------------------------------------
nginx -t 
nginx -s reload

在这里插入图片描述在真机使用curl命令可以查看
在这里插入图片描述浏览器中输入www.westos.org会自动跳转到bbs.westos.org
在这里插入图片描述
在这里插入图片描述

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

在这里插入图片描述在这里插入图片描述

在这里插入图片描述

八、防盗链

1、server2盗取server1的图片

在server2中编辑发布文件,写入访问该文件时,盗取server1主机中的图片
将上边实验的跳转语句注释

cd ###server2
cd /usr/local/nginx/html
vim test.html		##盗链文件,盗取server1主机的图片
///
<html>
<body>
<img src = "http://www.westos.org/download/vim.jpg">
</body>
</html>
///

在这里插入图片描述在浏览器中访问

172.25.24.1/download/vim.jpg
172.25.24.2/test.html

在这里插入图片描述

2、设定防盗链

在server1的配置文件中设定当被访问时,返回403报错或者显示指定防盗链图片,重启服务。

###server1
vim nginx.conf
///
server {
    listen 80;
    server_name     www.westos.org;
           location ~ .(jpg|png)$ {
            valid_referers none blocked www.westos.org;
            if ($invalid_referer) {
                    #return 403;		##返回403
                    rewrite ^/ http://172.25.24.2/daolian.jpg;		##显示指定图片
                      }
          	   }
///
nginx -s reload
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值