Nginx企业级优化
一、隐藏版本号信息
安装软件前修改,源码包中的版本信息
#切换到源码包目录
[root@localhost ~]# cd /usr/src/nginx-1.15.9/
[root@localhost nginx-1.15.9]# vim src/core/nginx.h                #修改nginx.h配置文件
#define nginx_version      1015009
#define NGINX_VERSION      "2.2.2"                                           #版本号信息
#define NGINX_VER          "bbs" NGINX_VERSION                     #软件名称
[root@localhost ~]# curl -I 192.168.200.111                              #验证
HTTP/1.1 200 OK
Server: bbs/2.2.2                                                                         #是已经更改的版本号
Date: Sun, 18 Aug 2019 13:15:44 GMT
Content-Type: text/html
Content-Length: 612
Last-Modified: Sun, 18 Aug 2019 13:14:28 GMT
Connection: keep-alive
ETag: "5d594f34-264"
Accept-Ranges: bytes
12345678910
安装后更改版本号
修改nginx/conf/nginx.conf
#在http模块下加入   server_tokens off;
[root@localhost ~]# vim /usr/local/nginx/conf/nginx.conf
server_tokens    off;
如果php配置文件中配置了fastcgi_param SERVER_SOFTWARE选项,则编辑php-fpm配置文件,将fastcgi_param SERVER_SOFTWARE对应值修改为fastcgi_param SERVER_SOFTWARE nginx;
[root@localhost ~]# curl -I 192.168.200.111                         #验证
HTTP/1.1 200 OK
Server: nginx                                                                         #安装后只能隐藏版本号,不能隐藏软件名
Date: Sun, 18 Aug 2019 13:25:25 GMT
Content-Type: text/html
Content-Length: 612
Last-Modified: Sun, 18 Aug 2019 13:21:44 GMT
Connection: keep-alive
ETag: "5d5950e8-264"
Accept-Ranges: bytes
12345678910
二、修改nginx用户和组
编译安装是指定
[root@localhost ~]# cd /usr/src/nginx-1.15.9/
[root@localhost nginx-1.15.9]#  ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_stub_status_module --with-http_ssl_module --with-http_flv_module --with-http_gzip_static_module&&make && make install
#--user=nginx --group=nginx
安装完后修改
#第一行中修改为user nginx nginx;
[root@localhost ~]# vim /usr/local/nginx/conf/nginx.conf
user  nginx nginx;
三、配置网页缓存时间
设置方法:可修改配置文件,在http段、或server段、或者location段加入对特定内容的过期参数。
[root@localhost ~]# vim /usr/local/nginx/conf/nginx.conf
 location ~\.(jpg)$ {          
  #设置jpg图片的缓存时间为一天
                expires 1d;
        }
抓包测试

四、实现nginx日志切割
注:实现日志切割时要使用到程序pid号         
[root@localhost ~]# vim /usr/local/nginx/conf/nginx.conf                          #修改配置文件
pid        logs/nginx.pid;                                                                                     #添加到配置文件全局中
                                                                                                              
[root@localhost ~]# /usr/local/nginx/sbin/nginx -s reload                          #重新刷新配置文件,出现如下错误
nginx: [error] invalid PID number "" in "/usr/local/nginx/logs/nginx.pid"         #表示pid文件并不存在
[root@localhost ~]# killall -9 nginx                                                               #杀死nginx进程
[root@localhost ~]#killall -HUP nginx                                                           #表示pid文件并不存在
[root@localhost ~]# /usr/local/nginx/sbin/nginx -s reload                           #刷新配置文件
[root@localhost ~]# ll
-rw-r--r--. 1 nginx root  1147 Aug 18 09:56 access.log
-rw-r--r--. 1 nginx root 11247 Aug 18 10:41 error.log
-rw-r--r--. 1 root  root     5 Aug 18 10:34 nginx.pid                                          #已经生成nginx.pid文件     
[root@localhost ~]# vim /opt/cut_nginx_log.sh                                               #编写切割日志文件脚本
#!/bin/bash
#切割nginx日志
logs_url="/usr/local/nginx/logs/"                                                                       #log日志存放位置
pid_url="/usr/local/nginx/logs/nginx.pid"                                                         #pid的位置
date_file=$(date -d "-1 day" "+%Y%m%d")                                                      #前一天的时间
[ -d "$logs_url/log_brk" ]|| mkdir -p $logs_url/log_brk                                     #备份日志的存放位置,没有创建
if [ -f $pid_url ];then                                                                                           #判断pid文件是否存在
        mv $logs_url/access.log $logs_url/log_brk/access.log.$date_file              #移动access日志文件
        mv $logs_url/error.log $logs_url/log_brk/error.log.$date_file                   #移动error日志文件
        kill -USR1 $( cat $pid_url )                                                                          #重新生成日志文件
        find $logs_url/log_brk -mtime +30 | xargs rm -fr                                      #将30天之前的日志文件删除,只保留近30天的
else
        echo "没有pid文件,切割失败" >> $logs_url/access.log  
fi
将写好的脚本测试完成后加入周期性任务中
[root@localhost ~]# crontab -e
0       0       *       *       *       sh /opt/cut_nginx_log.sh
五、Nginx运行进程数
nginx的进程数一般为cup的个数或者核心数的2倍
[root@localhost ~]# vim /usr/local/nginx/conf/nginx.conf
worker_processes  2;                                      #nginx进程数
worker_cpu_affinity 01 10 ;                            #为每个进程分配cpu核心
六、配置nginx实现连接超时
注;出现超时,会返回408报错
 [root@localhost ~]# vim /usr/local/nginx/conf/nginx.conf
  keepalive_timeout  65;                               #连接保持时间
    client_header_timeout 60;                       #客户端发送头部的超时时间
    client_body_timeout 60;                          #主体读取超时时间
七、配置nginx实现网页压缩功能
 [root@localhost ~]# vim /usr/local/nginx/conf/nginx.conf
    gzip  on;                                                    #开启gzip压缩输出
    gzip_min_length 1k;                                  #设置允许压缩的页面最小字节
    gzip_buffers 4 16k;                                   #申请4个16k的内存作为压缩结果流缓存
    gzip_http_version 1.1;                               #识别http协议版本,默认1.1
    gzip_comp_level 2;                                   #设置压缩级别
    gzip_types text/plain text/javascript application/x-javascript text/css text/xml application/xml application/xml+rss;                #压缩类型,对那些网页启用压缩功能
    #gzip_vary  on;                                        #让前端服务器缓存 经服务器压缩的gzip页面

八、配置nginx实现防盗链功能
#注:配置文件中只能出现一次~\.(wma|wmv|asf|mp3|mmf|zip|rar|jpg|gif|png|swf|flv)$
这些的匹配内容,如果出现配置不可用
[root@localhost ~]# vim /usr/local/nginx/conf/nginx.conf
location ~\.(wma|wmv|asf|mp3|mmf|zip|rar|jpg|gif|png|swf|flv)$ {
                expires 1d;                                                  #所以将缓存时间移到这里
                valid_referers none blocked *.fengling.com fengling.com;
                if ($invalid_referer){
                         rewrite ^/ http://www.fengling.com/error.txt;
                        #return 404;
                }

    }
测试
第一台服务器访问

第二台服务器,盗链第一台服务器图片无法显示

九、nginx为目录添加访问控制
用户访问控制,使用Apache的htpassword来创建密码
首先安装htpssword命令所需要的软件httpd-tools
[root@localhost ~]# yum -y install httpd-tools
[root@localhost ~]# htpasswd -c /usr/local/nginx/.htpasswd status
New password: 
Re-type new password: 
Adding password for user status
location ~/status {
                stub_status on;
                access_log off;
                auth_basic "Nginx Status";
                auth_basic_user_file /usr/local/nginx/.htpasswd;        
        }
        allow                        #开放ip
        deny                        #禁止ip

Active connections 表示当前活跃的连接数,
第三行的三个数字表示Nginx当前总共处理了11个连接,成功创建11次握手,总共处理了19个请求。
Reading表示Nginx读取到客户端Header信息数,
Writing表示Nginx返回给客户端的Header信息数
Waiting表示Nginx已经处理完,正在等候下一次请求指令时的驻留连接数。
十、自定义错误页面
[root@localhost ~]# vim /usr/local/nginx/conf/nginx.conf
error_page   403 404   /40x.html;
        location = /40x.html {
            root   html;
        }
在/usr/local/nginx/html下创建属于自己的错误页面名称为40x.html
测试

十一、自动索引
location /xiazai {
                autoindex on;
        }
在/usr/local/nginx/html下创建属于自己的下载目录我的名称是xaizai
测试

十二、目录别名功能
location /xiazai2 {
                alias /usr/local/nginx/html/xiazai;
                autoindex on;
        }
测试

十三、通过UA实现手机端和电脑端的分离
有两套网站代码,一套PC版放在/usr/local/nginx/html/web,一套移动版放在/usr/local/nginx/html/mobile。只需要修改nginx的配置文件,nginx通过UA来判断是否来自移动端访问,实现不同的客户端访问不同内容。
location / {
 #默认PC端访问内容
    root /usr/local/nginx/html/web;
 #如果是手机移动端访问内容
    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;
}
实验模拟:不同浏览器访问到不同的页面:
[root@localhost html]# mkdir huohu guge
[root@localhost html]# echo "hello,huohu" > huohu/index.html
[root@localhost html]# echo "hello,guge" > guge/index.html
    location / {
            if ($http_user_agent ~ Chrome){
                root /usr/local/nginx/html/guge;
            }
            if ($http_user_agent ~ Firefox){
                root /usr/local/nginx/html/huohu;
            }
            index  index.html index.htm;
        }
测试

十四、对FPM模块进行参数优化
FPM优化参数:
pm     使用哪种方式启动fpm进程,可以说static和dynamic,前者将产生     固定数量的fpm进程,后者将以动态的方式产生fpm进程
pm.max_children  static方式下开启的fpm进程数
pm.start_servers  动态方式下初始的fpm进程数量
pm.min_spare_servers 动态方式下最小的fpm空闲进程数
pm.max_spare_servers 动态方式下最大的fpm空闲进程数
注:以上调整要根据服务器的内存与服务器负载进行调整
示例:
服务器为云服务器,运行了个人论坛,内存为1.5G,fpm进程数为20,内存消耗近1G,处理比较慢
优化参数调整:
# 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企业级优化的更多相关文章

  1. The server of Nginx(三)——Nginx企业级优化

    相信看过我之前apache文章的朋友们,对服务优化也有了一个大概的了解,相比较而言,Nginx企业中应用的更多一些,因此今天也会详细阐述Nginx的优化,有人说,服务器不需要优化,开虚拟化,分分钟成倍 ...

  2. Nginx企业级优化!(重点)

    隐藏Nginx版本号!(重点) 在生产环境中,需要隐藏 Nginx 的版本号,以避免安全漏洞的泄漏 一旦有黑客知道Nginx版本号便可以利用Nginx漏洞进行攻击,严重影响到了公司的安全 查看隐藏版本 ...

  3. 企业级Web Nginx 服务优化

    企业级Web Nginx 服务优化 http://blog.51cto.com/search/result?q=%E4%BC%81%E4%B8%9A%E7%BA%A7Web+Nginx+%E6%9C% ...

  4. 企业级web nginx服务优化

    1.1)隐藏nginx header 内版本号信息 [root@aliyun ~]# vi /application/nginx/conf/nginx.conf http{ …… server_tok ...

  5. nginx + SSL优化配置

    nginx + SSL优化配置: #http段添加如下配置项: http { ssl_prefer_server_ciphers on; #设置协商加密算法时,优先使用我们服务端的加密套件,而不是客户 ...

  6. nginx 配置优化的几个参数

    nginx 配置优化的几个参数 2011-04-22 本文地址: http://blog.phpbean.com/a.cn/7/ --水平有限欢迎指正-- -- 最近在服务器上搞了一些nginx 研究 ...

  7. 【实战分享】又拍云 OpenResty / Nginx 服务优化实践

    2018 年 11 月 17 日,由 OpenResty 主办的 OpenResty Con 2018 在杭州举行.本次 OpenResty Con 的主题涉及 OpenResty 的新开源特性.业界 ...

  8. [Nginx] – 性能优化 – 配置文件优化

    Nginx基本安全优化 1.调整参数隐藏Nginx版本号信息     一般来说,软件的漏洞都和版本有关,因此我们应尽量隐藏或清除Web服务队访问的用户显示各类敏感信息(例如:Web软件名称及版本号等信 ...

  9. Nginx配置项优化详解【转】

    (1)nginx运行工作进程个数,一般设置cpu的核心或者核心数x2 如果不了解cpu的核数,可以top命令之后按1看出来,也可以查看/proc/cpuinfo文件 grep ^processor / ...

随机推荐

  1. Apriori关联分析详解

    ------------恢复内容开始------------ 一. Apriori关联分析概述 选择物品之间的关联规则也就是要找出物品之间的关系,要找到这种关系有两步 找出频繁一起出现的物品集的集合, ...

  2. 洛谷 P4017 最大食物链计数

    洛谷 P4017 最大食物链计数 洛谷传送门 题目背景 你知道食物链吗?Delia生物考试的时候,数食物链条数的题目全都错了,因为她总是重复数了几条或漏掉了几条.于是她来就来求助你,然而你也不会啊!写 ...

  3. BZOJ2339/LG3214 「HNOI2011」 卡农 组合数学

    问题描述 BZOJ2339 本题的一些心得 对于这种无序集合计数类问题,可以通过对方案数除以某个数的阶乘,使得无序化变为有序化. 设计DP方程时候,应该先有序的列出状态转移方程每一项的来源,并一项项推 ...

  4. 2. 词法"陷阱"

    1. 练习2-1 某些编译器允许嵌套注释.请写一个程序测试,要求:无论是对允许嵌套注释的编译器,还是对不允许嵌套注释的编译器,该程序都能正常通过编译,但是这两者情况下执行的结果却不相同. #inclu ...

  5. Linux 部署 rabbitMQ集群

    1. 部署Erlang 1.1 RabbitMQ依赖于Erlang,版本对应请查看 https://www.rabbitmq.com/which-erlang.html 1.2 下载安装Erlang ...

  6. 【Linux命令】nohup命令用法

    nohup命令用法 当我们想将某个脚本或程序运行在后台的时候.我们一般会在程序或脚本后面添加 & 字符来表示在后台运行,但使用& 运行在后台,当我们将shell窗口关闭时,该脚本或程序 ...

  7. 拎壶学python3-----(5)pycharm解决运行时少库的问题

    有时候我们运行的时候会出现如下现象 no module named requests怎么办呢? 点击设置: 安装成功后会显示如下: 怎么进行安装呢? 然后退出再运行: 发现已经没有缺少requests ...

  8. RST Methodology: “Responsible Tester”

    翻译另一篇James Bach的关于快速软件测试的文章,原文链接:http://www.satisfice.com/blog/archives/1364 在快速软件测试方法论中,我们区分出三种主要角色 ...

  9. javascript 模块化 (切记:学习思想)

    模块化(切记:学习思想) 如果不用模块化编写代码,那么会具有以下问题: 代码杂乱无章,没有条理性,不便于维护,不便于复用 很多代码重复.逻辑重复 全局变量污染 不方便保护私有数据(闭包) 模块化的基本 ...

  10. 解决SVN 被锁且Cleanup无效问题

    开发两年多,依然用svn做代码管理工具,看到隔壁java组用git,心向往之,奈何苦苦不得机会,既然用svn,那么就说一说svn碰到的问题如何解决吧. 有时候我们在提交,或者更新代码时,由于网络或其他 ...