跳至主要內容

Nginx-使用技巧 💡

晨光-向大约 6 分钟服务器服务器Web服务器

Nginx-使用技巧

Nginx优化静态文件加载

参考文档:文档地址open in new window

配置Https 😄

1. 参考文档

nginx配置https访问:

参考文档一open in new window

参考文档二open in new window

参考文档三open in new window 🚗

2. 问题

问题一: 没有配置ssl模块

解决nginxopen in new window: [emerg] the "ssl" parameter requires ngx_http_ssl_module in /usr/local/nginx的问题?

Nginx如果未开启SSL模块,配置Https时提示错误open in new window 🚗

已经编译的nginx添加with-http_ssl_module模块 open in new window

./configure --prefix=/opt/develop/nginx/sbin/nginx --with-http_stub_status_module --with-http_ssl_module

获取重新安装删除之前配置的nginx目录,使用nginx源码重新配置(./configure时候,添加上边配置)

3. 配置

  # 免费证书
    server {
         # SSL 访问端口号为 443
         listen 443 ssl;
         # 填写绑定证书的域名
         server_name ts.cnlxc.cn;
         # 替换成已上传的证书文件的目录和名称。
         ssl_certificate /opt/develop/ssl/9570621_ts.cnlxc.cn.pem;  
         # 替换成已上传的证书私钥文件的目录和名称。
         ssl_certificate_key /opt/develop/ssl/9570621_ts.cnlxc.cn.key; 
         ssl_session_timeout 5m;
         # 请按照以下套件配置,配置加密套件,写法遵循 openssl 标准。
         ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
         # 请按照以下协议配置
         ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3;
         ssl_prefer_server_ciphers on;

         if ($host != 'ts.cnlxc.cn') {
            rewrite ^/(.*)$ https://ts.cnlxc.cn/$1 permanent;
         }
       
       
        # /vue/dist/ 打包后的dist目录
        root /opt/project/static/document;
       

        # 文件代理
        location /upFiles/ {
            alias /opt/project/upFiles/;
	        add_header 'Access-Control-Allow-Origin' '*';
        }

    }  

    # 网站
    server {
        listen       80;
        
        # 配置https
        server_name ts.cnlxc.cn;

        #将请求转成https
        rewrite ^(.*)$ https://$host$1 permanent;
        
    
        # http 配置
        # server_name  localhost;
        # root   /opt/project/static/document;
        # location / {
        #    try_files $uri $uri/ /index.html;  
        # }

        # location @rewrites {
        #   rewrite ^(.+)$ /index.html last;
        # }

        # error_page   500 502 503 504  /50x.html;
        # location = /50x.html {
        #     root   html;
        # }
    }

开启HTTP/2

配置验证

HTTP/2标准是从Google的SPDY上进行改进的,比起HTTP/1.1提升了不少性能,尤其是需要并行多个请求的时候可以显著减少延迟。在现在的网络上,一个网页平均需要请求几十次,而在 HTTP 1.1 时代浏览器能做的就是多开几个TCP连接(通常是 6 个)进行并行HTTP请求,而 HTTP 2 中可以在一个TCP连接中进行多个HTTP请求。HTTP 2 原生支持多个并行请求,因此大大减少了顺序执行的请求的往返程,可以首要考虑开启。

HTTP是基于TCP上的协议,每一次HTTP请求都需要先建立一次TCP。到了HTTP/2,一个TCP可以发送多个HTTP请求

1.在 Nginx 中开启 HTTP 2.0 非常简单,只需要增加一个 http2 标志即可

listen 443 ssl;
# 改为
listen 443 ssl http2;

如果你担心你的用户用的是旧的客户端,比如 Python 的 requests,暂时还不支持 HTTP 2 的话,那么其实不用担心。如果用户的客户端不支持 HTTP 2,那么连接会自动降级为 HTTP 1.1,保持了后向兼容。因此,所有使用旧 Client 的用户,仍然不受影响,而新的客户端则可以享受 HTTP/2 的新特性

2.确认你的网站或者 API 开启了 HTTP 2

在 Chrome 中打开开发者工具,点开 Protocol 之后在所有的请求中都可以看到请求用的协议了。如果 protocol 这列的值是 h2 的话,那么用的就是 HTTP 2 了

image-20230412135115308
image-20230412135115308

h2协议:表示配置http2成功

http/1.1:是使用阿里云OSS云存储,后形成的连接。跟配置的nginx不同。

问题

问题一:开启http2失败

nginx: [emerg] the "http2" parameter requires ngx_http_v2_module in /opt/develop/nginx/conf/nginx.conf:54

参考文档:

官网文档open in new window

Nginx配置开启HTTP2支持open in new window

--with-http_v2_module:需要http2模块open in new window 🚗

注意:版本在1.9.5以上 ,

./configure --prefix=/opt/develop/nginx/sbin/nginx --with-http_v2_module
  • 删除之前解压后的文件,重新安装 🚗
./configure --prefix=/opt/develop/nginx \
--sbin-path=/opt/develop/nginx/sbin/nginx \
--modules-path=/opt/develop/nginx/modules \
--conf-path=/opt/develop/nginx/conf/nginx.conf \
--error-log-path=/opt/develop/nginx/logs/error.log \
--http-log-path=/opt/develop/nginx/logs/access.log \
--pid-path=/opt/develop/nginx/logs/nginx.pid \
--lock-path=/opt/develop/nginx/logs/nginx.lock \
--with-http_stub_status_module \
--with-http_ssl_module \
--with-http_v2_module

限流 😄

1. 参考文章

Nginx的限流策略open in new window

Nginx限流open in new window

Nginx 如何限流和访问控制(详解)open in new window

2. 问题

对nginx的imit_conn_zone理解配置_"zero size shared memory zone "perip"_open in new window

3. 配置

http {
    # 限流设置
    # 这只是设置流量限制和共享内存区域的参数,但实际上并不限制请求速率。具体的限制需要定义具体的url
    limit_req_zone $binary_remote_addr zone=contentRateLimit:10m rate=2r/s;
    # 根据IP地址来限制,存储内存大小10M
    limit_conn_zone $server_name zone=perip:10m;   # $binary_remote_addr是限制同一客户端ip地址;
    limit_conn_zone $server_name zone=perserver:10m; # 限制同一server最大并发数;

    location / {
               # 使用限流配 
               # 配合limit_req_zone配置使用------平均每秒允许不超过2个请求,突发不超过4个请求,并且处理突发4个请求的时候,没有延迟,等到完成之后,按照正常的速率处理。
               limit_req zone=contentRateLimit burst=4 nodelay;
               # 限制并发连接数:配合limit_conn_zone使用------单个客户端ip与服务器的连接数.
               limit_conn perip 2;
               # 限制并发连接数:配合limit_conn_zone使用------限制与服务器的总连接数
               limit_conn perserver 20; 
               # 限制下载速度:限速为 100KB/秒
               # 是对每个连接限速100k。这里是对连接限速,而不是对IP限速!如果一个IP允许两个并发连接,那么这个IP就是限速limit_rate * 2
               limit_rate 100k; 

               index index.html index.htm;
    }
}

防盗链 😈

本地博文:地址 ;参考博文:地址open in new window

Nginx配置限制IP访问

Linux查看访问IP以及统计日志访问最多的IP ,以及安全的问题

Linux查看访问IP以及统计日志访问最多的IP ,以及安全的问题_如何查看服务器被谁访问过_半碗面的博客-CSDN博客open in new window

netstat -ntu

# 使用 awk 将第五列单独截出来 :
netstat -ntu | grep tcp | awk '{print $5}'

安全配置:

  1. 编辑脚本 vim /usr/local/bin/secure_ssh.sh

    #! /bin/bash
    cat /var/log/secure|awk '/Failed/{print $(NF-3)}'|sort|uniq -c|awk '{print $2"="$1;}' > /usr/local/bin/black.txt
    for i in `cat  /usr/local/bin/black.txt`
    do
      IP=`echo $i |awk -F= '{print $1}'`
      NUM=`echo $i|awk -F= '{print $2}'`
       if [ $NUM -gt 5 ];then
          grep $IP /etc/hosts.deny > /dev/null
        if [ $? -gt 0 ];then
          echo "sshd:$IP:deny" >> /etc/hosts.deny
        fi
      fi
    done
    
  2. 创建记录登录失败次数的文件 touch /usr/local/bin/black.txt

  3. 添加定时 5分钟执行一次

    #进入crontab编辑界面。会打开vim编辑你的工作
    crontab -e
    
     
    #输入数据,基本格式为 :
    */5 * * * * sh /usr/local/bin/secure_ssh.sh
    
    
    # 查看定时任务
    crontab -l
    
定时任务添加执行
定时任务添加执行

参考文档:

Linux的定时任务设置,看这一篇就够了! - 知乎 (zhihu.com)open in new window

Linux Crontab 定时任务 | 菜鸟教程 (runoob.com)open in new window

linux利用crontab添加定时任务详解 - 享尔正 - 博客园 (cnblogs.com)open in new window

参考文档:Nginx一网打尽:动静分离、压缩、缓存、黑白名单、跨域、高可用、性能优化open in new window