一、配置Nginx隐藏版本号
1修改源码包 ,必须在安装之前(测试命令curl -I http://192.168.200.102)
yum -y install pcre-devel zlib-devel openssl-devel gcc gcc-c++ make
useradd -M -s /sbin/nologin nginx
tar xf nginx-1.16.1.tar.gz -C /usr/src/
cd /usr/src/nginx-1.16.1/
vim src/core/nginx.h
#define NGINX_VERSION "1.16.1" (修改版本号)
#define NGINX_VER "nginx/" NGINX_VERSION (修改服务名)
2修改配置文件(已安装nginx)
vim /usr/local/nginx/conf/nginx.conf
在http内添加一条,隐藏版本号
server_tokens off;
(在源码包已经隐藏版本号的情情况下,再修改主配置文件,会显示服务名,但不显示服务版本号)
如果php配置文件中配置了fastcgi_param SERVER_SOFTWARE选项,则编辑php-fpm配置文件,将fastcgi_param SERVER_SOFTWARE对应值修改为fastcgi_param SERVER_SOFTWARE nginx;(除了隐藏nginx的版本以外,php的版本也要隐藏)
二、修改Nginx用户与组
1编译安装时指定
useradd -M -s /sbin/nologin nginx
./configure --prefix=/usr/local/nginx --user=nginx --group=nginx && make && make install
2修改配置文件
vim /usr/local/nginx/conf/nginx.conf
user nginx nginx; (修改用户和[组]组可以省略)
killall -HUP nginx
三、配置Nginx网页缓存时间
一般针对静态网页进行设置,对动态网页不用设置缓存时间,因为动态网页在服务器上不是完整的存在
设置方法:可修改配置文件,在http段、或server段、或location段加入对特定内容的过期参数
编辑主配置文件,添加以下内容
vim /usr/local/nginx/conf/nginx.conf
location ~ \.(gif|jpg|jpeg|png|bmp|ico)$ {
expires 1d;
}
location ~ .*\.(js|css)$ {
expires 1h;
}
killall -HUP nginx
四、实现Nginx的日志切割
日志存放位置/usr/local/nginx/logs/access.log
vim /opt/cut_nginx_log.sh
#!/bin/bash
# cut_nginx_log.sh
datetime=$(date -d "-1 day" "+%Y%m%d") (变量为前一天的完整时间)
log_path="/usr/local/nginx/logs" (定义日志存放位置变量)
pid_path="/usr/local/nginx/logs/nginx.pid" (定义PID文件变量)
[ -d $log_path/backup ] || mkdir -p $log_path/backup (如果P没有backup这个文件,则创建)
if [ -f $pid_path ] (如果Nginx在运行,有PID文件)
then
mv $log_path/access.log $log_path/backup/access.log-$datetime (移动现有日志文件到backup内,叫做access.log-一天前的日期)
kill -USR1 $(cat $pid_path) (重新生成新的空白日志文件)
find $log_path/backup -mtime +30 | xargs rm -f (寻找backup内30天修改过的文件删除)
else
echo "Error,Nginx is not working!" | tee -a /var/log/messages (输出Error,Nginx is not working!并且写入系统日志messages内)
fi
chmod +x /opt/cut_nginx_log.sh
设计周期性计划任务
crontab -e
0 0 * * * /opt/cut_nginx_log.sh
五、配置Nginx实现连接超时
修改主配置文件 vim /usr/local/nginx/conf/nginx.conf
在http内添加
keepalive_timeout 65; (设置连接保持超时时间,一般可只设置该参数,默认为65秒,可根据网站的情况设置,或者关闭,可在http段、server段、或者location段设置。)
client_header_timeout 60; (指定等待客户端发送请求头的超时时间。)
client_body_timeout 60; (设置请求体读取超时时间。)
killall -HUP nginx
六、更改Nginx运行进程数
修改配置文件的worker_processes参数,一般设置为CPU的个数或者核数(也可两倍)
1 全局配置 (在括号之外的内容)
user nginx [nginx]; 运行用户(nginx组可以不用写)
worker_processes 2; 指定工作进程数量 (一般都是按照核心数指定一比一)
worker_cpu_affinity 01 10; (指定CUP分配。如果四核0001 0010 0100 1000)
worker_rlimit_nofile 102400; (指定Nginx一个进程打开的最多文件数目,理论值应该是最多打开文件数【ulimit -n查看,修改:ulimit -n 新值】【ulimit -u 最大用户进程数,修改:ulimit -u 新值】这两个值最好一样,现在是临时修改,永久修改把这两条命令放在/etc/profile内)
error_log logs/error.log; (错误日志存放位置)
pid logs/nginx.pid; (进程PID存放位置)
2 I/O事键 (events括号内的内容)
use epoll; (使用epoll模型,对于2.6以上的内核,建议使用epoll模型以提高性能)
worker_connections 1024; (工作连接数量,一般工作中配置为4096。单个工作进程并发数量,服务器总并发数量为工作进程数X工作连接数)
killall -HUP nginx
七、配置Nginx实现网页压缩功能
在http内添加
Nginx的ngx_http_gzip_module压缩模块提供了对文件内容压缩的功能,允许nginx服务器将输出内容发送到客户端之前进行压缩
修改主配置文件 vim /usr/local/nginx/conf/nginx.conf
gzip on; (开启gzip压缩输出)
gzip_min_length 1k; (用于设置允许压缩的页面最小字节数【大于1K文件要压缩】)
gzip_buffers 4 16k; (表示申请4个单位为16k的内存作为压缩结果流缓存,默认值是申请与原始数据大小相同的内存空间来储存gzip压缩结果)
gzip_http_version 1.1; (设置识别http协议版本,默认是1.1)
gzip_comp_level 2; (gzip压缩比,1-9等级)
gzip_types text/plain text/javascript application/x-javascript text/css text/xml application/xml application/xml+rss; (压缩类型,是就对哪些网页文档启用压缩功能)
#gzip_vary on; (选项可以让前端的缓存服务器经过gzip压缩的页面)
killall -HUP nginx
八、配置Nginx实现防盗链功能
资源主机设置防盗链
配置说明:
valid_referers 设置信任网站
none 浏览器中referer(Referer是header的一部分,当浏览器向web服务器发送请求的时候,一般会带上Referer,告诉服务器我是从哪个页面链接过来的,服务器基此可以获得一些信息用于处理)为空的情况,就直接在浏览器访问图片
blocked referer不为空的情况,但是值被代理或防火墙删除了,这些值不以http://或https://开头
修改主配置文件 vim /usr/local/nginx/conf/nginx.conf
在server内添加
location ~* \.(wma|wmv|asf|mp3|mmf|zip|rar|jpg|gif|png|swf|flv)$ { (匹配以这些格式结尾的)
valid_referers none blocked *.source.com source.com; (设置信任的网站)
if ($invalid_referer) { (判断除了信任以外的)
rewrite ^/ http://www.source.com/error.jpg; (转到一个错误图片上)
#return 403;
}
}
killall -HUP nginx
九、对FPM模块进行参数优化
pm (使用哪种方式启动fpm进程,可以说static和daynamic,前者将产生固定数量的fpm进程,后者以动态的方式产生fpm进程)
pm._max_children (static放手机下开启的fpm进程数)
pm.start_servers (动态方式下初始的fpm进程数量)
pm.min_spare_servers (动态方式下最最小的fpm空闲进程数)
pm.max_spare_servers (动态方式下最大的fpm空闲进程数)
vim /usr/local/php5/etc/php-fpm.conf
pm = dynamic
pm.start_servers = 5
pm.min_spare_servers = 2
pm.max_spare_servers = 8
十、Nginx为目录添加访问控制
用户访问控制:使用apache的htpasswd创建密码文件
yum -y install httpd-tools (安装httpd-tools)
htpasswd -c /usr/local/nginx/.htpasswd laowang (指定一个保存用户和密码的位置 。-c是创建,如果创建一次之后,以后不可以再加-c,会覆盖原文件)
vim /usr/local/nginx/conf/nginx.conf
location /status {
stub_status on;
access_log off;
auth_basic "NginxStatus"; (basic为认证类型,一种为摘要认证,另一种为基本【基准认证】认证,basic为基本认证,摘要 认证很多浏览器不支持)
auth_basic_user_file /usr/local/nginx/.htpasswd; (指定认证文件名)
}
killall -HUP nginx
客户端地址访问控制:
vim /usr/local/nginx/conf/nginx.conf
在上一条location里添加
allow IP; (允许IP)
deny IP; (拒绝IP)
也可添加网段短格式,192.168.200.0/24
十一、自定义错误页面
vim /usr/local/nginx/conf/nginx.conf
在server内添加
error_page 403 404 /404.html;
location = /404.html {
root html;
}
建立错误 页面文件(根据要求定义页面内容)
vim /usr/local/nginx/html/404.html
killall -HUP nginx
十二、自动索引
cd /usr/local/nginx/html/ (进入nginx网页存放目录)
mkdir 123/abc{1..10} -p (在文件夹内创建abc1-10个文件夹)
touch 123/abc1/1.txt (建立测试文件)
编辑主配置文件
vim /usr/local/nginx/conf/nginx.conf
在server内添加
location /123 {
autoindex on;
}
killall -HUP nginx
当访问123的时候会显示目录,点击可以下载目录内内容
十三、通过UA实现手机端和电脑端的分离
实现nginx区分pc和手机访问不同的网站,是两套网站,移动和PC各一套,两套网站需要单独维护
一套PC版放在/usr/loca/nginx/html/web,一套移动版放在/usr/local/nginx/htnl/mobile
1移动端访问,实现不同的客户端访问不同内容(判断 $http_user_agent 【有浏览器和客户端相关信息】变量)
cd /usr/local/nginx/html (进入网页存放目录)
mkdir web mobile (建立两个文件夹)
vim web/index.html (建立pc端访问页面)
vim mobile/index.html (建立手机端访问页面)
vim /usr/local/nginx/conf/nginx.conf (修改主配置文件)
location / {
root /usr/local/nginx/html/web; (默认PC端访问内容)
if ( $http_user_agent ~ "(MIDP)|(WAP)|(UP.Browser)|(Smartphone)|(Obigo)|(Mobile)|(AU.Browser)|(wxd.Mms)|(WxdB.Browser)|(CLDC)|(UP.Link)|(KM.Browser)|(UCWEB)|(SEMC-Browser)|(Mini)|(Symbian)|(Palm)|(Nokia)|(Panasonic)|(MOT-)|(SonyEricsson)|(NEC-)|(Alcatel)|(Ericsson)|(BENQ)|(BenQ)|(Amoisonic)|(Amoi-)|(Capitel)|(PHILIPS)|(SAMSUNG)|(Lenovo)|(Mitsu)|(Motorola)|(SHARP)|(WAPPER)|(LG-)|(LG/)|(EG900)|(CECT)|(Compal)|(kejian)|(Bird)|(BIRD)|(G900/V1.0)|(Arima)|(CTL)|(TDG)|(Daxian)|(DAXIAN)|(DBTEL)|(Eastcom)|(EASTCOM)|(PANTECH)|(Dopod)|(Haier)|(HAIER)|(KONKA)|(KEJIAN)|(LENOVO)|(Soutec)|(SOUTEC)|(SAGEM)|(SEC-)|(SED-)|(EMOL-)|(INNO55)|(ZTE)|(iPhone)|(Android)|(Windows CE)|(Wget)|(Java)|(curl)|(Opera)" )
{
root /usr/local/nginx/html/mobile; ( 如果是手机移动端访问内容)
}
index index.html index.htm;
}
killall -HUP nginx
2不同浏览器访问到不同的页面
mkdir firefox msie
vim firefox/index.html
vim msie/index.html
vim /usr/local/nginx/conf/nginx.conf
location / {
if ($http_user_agent ~ Firefox) { (如果浏览器匹配Firefox访问firefox)
root /usr/local/nginx/html/firefox;
}
if ($http_user_agent ~ MSIE) { (如果浏览器匹配MISE访问msie)
root /usr/local/nginx/html/msie;
}
index index.html index.htm;
}
killall -HUP nginx