nginx可以做什么
1 可针对静态资源高速高并发访问及缓存。
2 可使用反向代理加速,并且可进行数据缓存。
3 具有简单负载均衡、节点健康检查和容错功能。
4 支持远程FastCGI服务的缓存加速。
5 支持FastCGI、Uwsgi、SCGI、Memcached Servers的加速和缓存。
6 支持SSL、TLS、SNI。
7 具有模块化的架构:过滤器包括gzip压缩、ranges支持、chunked响应、XSLT、SSI及图像缩放等功能。在SSI过滤器中,一个包含多个SSI的页面,如果经由FastCGI或反向代理处理,可被并行处理。
作为WEB服务的话支持
1 支持基于名字、端口及IP的多虚拟主机站点。
2 支持Keep-alive和pipelined连接。
3 可进行简单、方便、灵活的配置和管理。
4 持修改Nginx配置,并且在代码上线时,可平滑重启,不中断业务访问。
5 可自定义访问日志格式,临时缓冲写日志操作,快速日志轮询及通过rsyslog处理日志。
6 可利用信号控制Nginx进程。
7 支持3xx-5xx HTTP状态码重定向。404文件找不到 301重定向 302 永久重定向 403 没有权限 500 服务器错误 502 网关错误
8 支持rewrite模块,支持URI重写及正则表达式匹配。
9 支持基于客户端IP地址和HTTP基本认证的访问控制。
10 支持PUT、DELETE、MKCOL、COPY及MOVE等较特殊的HTTP请求方法。
11 支持FLV流和MP4流技术产品应用。
12 支持HTTP响应速率限制。
13 支持同一IP地址的并发连接或请求数限制。
14 支持邮件服务代理。
总的来说就是三种应用场景
(1)作为Web服务软件
(2)反向代理或负载均衡服务
(3)前端业务数据缓存服务
这些应用场景下无外乎都需要暴露在外受人攻击,所以需要一些优化来避免和提升安全性。
隐藏版本号
第一种是修改 Nginx的主配置文件
第二种是修改Nginx源码文件,指定不显示版本号
[root@localhost ~]# curl -I localhost ##可以查看版本号等详细信息
HTTP/1.1 200 OK
Server: nginx/1.15.9
第一种修改配置文件不显示版本号
进入配置文件
[root@localhost ~]# vi /usr/local/nginx/conf/nginx.conf
http {
include mime.types;
default_type application/octet-stream;
server_tokens off; ##插入这段字,隐匿服务器版本(on为开启,off为关闭)
[root@localhost~]# systemctl restart nginx ###重启Nginx服务
[root@localhost ~]# curl -I 20.0.0.1 ##再次查看
HTTP/1.1 200 OK
Server: nginx
第二种修改Nginx源码
Nginx源码文件nginx-1.15.9/src/core/nginx.h中包含了版本信息,可以随意设置,
然后重新编译安装,隐藏版本信息
[root@localhost core]# vi /opt/nginx-1.15.9/src/core/nginx.h
#define NGINX_VERSION "6.6.6" ##直接修改版本号
#define NGINX_VER "DDC" NGINX_VERSION ##直接修改服务器信息
然后进行编译安装
[root@localhost nginx-1.15.9]#
./configure \
--prefix=/usr/local/nginx \
--user=nginx \
--group=nginx \
--with-http_stub_status_module
[root@localhost nginx-1.15.9]# make && make install
[root@localhost ~]# vi /usr/local/nginx/conf/nginx.conf
##我们需要展示修改过的服务器版本信息,因此需要开启展示功能
http {
include mime.types;
default_type application/octet-stream;
server_tokens on;
再去查看版本号
[root@localhost nginx-1.15.9]# curl -I 20.0.0.1
HTTP/1.1 200 OK
Server: DDC6.6.6
修改用户与组
Nginx运行时需要有专门的用户和组,用以对网站的访问控制
编译时指定用户与组
[root@localhost opt]# cd nginx-1.15.9/
[root@localhost nginx-1.15.9]# ./configure \
--prefix=/usr/local/nginx \
--user=nginx \ ##指定用户
--group=nginx \ ##指定组账号
--with-http_stub_status_module
修改Nginx配置文件指定用户与组
[root@localhost conf]# cd /usr/local/nginx/conf/
[root@localhost conf]# vi nginx.conf
user nginx nginx; ##原本是nobody,修改用户为nginx,组为nginx
配置网页缓存时间
主配置文件http{}种新建一个location区域配置缓存时间
[root@localhost conf]# vi /usr/local/nginx/conf/nginx.conf
location ~\.(gif|jpg|jepg|png|bmp|ico)$ { ##指定图片格式
root html;
expires 2d; ##缓存2天
}
设置超时时间
避免长时间占用造成浪费。
[root@localhost conf]# vi /usr/local/nginx/conf/nginx.conf
http {
#keepalive_timeout 0;
keepalive_timeout 65 300;默认65设置为300s
client_header_timeout 80;
client_body_timeout 80;
然后进行抓包测试看看多久掉线验证一下。
进程优化
nginx 的工作进程
主进程和工作进程
[root@localhost nginx-1.15.9]# ps aux | grep nginx
root 17488 0.0 0.0 20556 636 ? Ss 01:44 0:00 nginx: master process /usr/local/nginx/sbinnginx
nginx 17489 0.0 0.0 23012 1404 ? S 01:44 0:00 nginx: worker process
修改配置文件
[root@localhost proc]# vi /usr/local/nginx/conf/nginx.conf
worker_processes 3; ##进程数改为3,工作进程数默认为1,
worker_cpu_affinity 001 010 100; ##插入这行字段,配置负载均衡,没有闲置的cpu核心
events {
worker_connections 1024; ##每个工作进程可以建立的连接数
}
[root@localhost proc]# systemctl restart nginx ##重启生效
网页压缩
节约带宽成本提高用户体验
[root@localhost conf]# vi /usr/local/nginx/conf/nginx.conf
gzip on; ##找到gzip on,去掉前面的注释开启压缩功能
gzip_buffers 4 64k; //表示申请4个单位为16k的内存作为压缩结果流缓存,默认值是申请与原始数据大小相同的内存空间来存储gzip压缩结果;
gzip_http_version 1.1;
gzip_comp_level 6; //用来指定gzip压缩比,1压缩比最小,处理速度最快;9压缩比最大,传输速度快,但处理速度最慢,使用默认即可;
gzip_min_length 1k; //用于设置允许压缩的页面最小字节数;
gzip_vary on;
gzip_types text/plain text/javascript application/x-javascript text/css text/xml application/xml application/xml+rss; //压缩类型,是对哪些网页文档启用压缩功能;
防盗链
去nginx/html下编入一个网页当成正版
[root@localhost html]# vi /usr/local/nginx/html/index.html
<html><body><h1>test1</h1>
<img src="111.jpg"/>
</body></html>
登录测试
在去配置一台盗链重定向网站
[root@localhost html]# yum -y install httpd
[root@localhost html]# vi /var/www/html/index.html
<html><body><h1>ni fan shi le</h1>
<img src="222.jpg"/>
</body></html>
回去nginx配置防盗链
[root@localhost html]# vim /usr/local/nginx/conf/nginx.conf
location ~*.(jpg|gif|swf)$ { 匹配以.(jpg|gif|swf)格式结尾的请求
valid_referers none blocked *.test.com test.com; 合法访问是以.test.com形式的请求
if ($invalid_referer)
如果是非法访问rewrite ^/ http://20.0.0.1/111.jpg; 则重定向到 http://20.0.0.3/222.jpg
日志切割
nginx日志文件需要分割不然文件数量巨大对于管理监控都很难办成,所以需要定期的去做日志切割
把nginx日志文件usr/local/nginx/logs/access.log移动到var/log/nginx下然后用kill-USR1创建新的日志文件accesslog
[root@www logs]# vi/opt/fengge.sh
#!/bin/bash
#Filename: rizhifenge.sh
d=$(date -d "-1 day" "+%Y%m%d") ##基本上是凌晨所以需要减1天
logs_path="/var/log/nginx"
pid_path="/usr/local/nginx/logs/nginx.pid"
[ -d $logs_path ]ll mkdir -p $logs_path ####创建日志文件目录
mv /usr/local/nginx/logs/access.log ${logs_path}/51xit.top-access.log-$d ##移动并重命名日志文件
kill-USR1 $(cat $pid path)#重建新日志文件
find $logs_path -mtime +30 |xargs rm -rf ##删除30天之前的日志文件