Nginx配置优化

一、配置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内添加

Nginxngx_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

 

原文地址:https://www.cnblogs.com/shinian12138/p/11529400.html