Nginx-使用技巧 💡
Nginx-使用技巧
Nginx优化静态文件加载
参考文档:文档地址
配置Https 😄
1. 参考文档
nginx配置https访问:
参考文档三 🚗
2. 问题
问题一: 没有配置ssl模块
解决nginx: [emerg] the "ssl" parameter requires ngx_http_ssl_module in /usr/local/nginx的问题?
Nginx如果未开启SSL模块,配置Https时提示错误 🚗
已经编译的nginx添加with-http_ssl_module模块
./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 了
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
参考文档:
--with-http_v2_module:需要http2模块 🚗
注意:版本在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. 参考文章
2. 问题
对nginx的imit_conn_zone理解配置_"zero size shared memory zone "perip"_
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;
}
}
防盗链 😈
Nginx配置限制IP访问
Linux查看访问IP以及统计日志访问最多的IP ,以及安全的问题
Linux查看访问IP以及统计日志访问最多的IP ,以及安全的问题_如何查看服务器被谁访问过_半碗面的博客-CSDN博客
netstat -ntu
# 使用 awk 将第五列单独截出来 :
netstat -ntu | grep tcp | awk '{print $5}'
安全配置:
编辑脚本 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
创建记录登录失败次数的文件 touch /usr/local/bin/black.txt
添加定时 5分钟执行一次
#进入crontab编辑界面。会打开vim编辑你的工作 crontab -e #输入数据,基本格式为 : */5 * * * * sh /usr/local/bin/secure_ssh.sh # 查看定时任务 crontab -l
参考文档:
Linux的定时任务设置,看这一篇就够了! - 知乎 (zhihu.com)
Linux Crontab 定时任务 | 菜鸟教程 (runoob.com)
linux利用crontab添加定时任务详解 - 享尔正 - 博客园 (cnblogs.com)