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. SP1716 GSS3 - Can you answer these queries III 线段树

    问题描述 [LG-SP1716](https://www.luogu.org/problem/SP1716] 题解 GSS 系列的第三题,在第一题的基础上带单点修改. 第一题题解传送门 在第一题的基础 ...

  2. Codeforces Round #599 (Div. 1) A. Tile Painting 数论

    C. Tile Painting Ujan has been lazy lately, but now has decided to bring his yard to good shape. Fir ...

  3. centos安装nginx并配置SSL证书

    安装nginx的命令 sudo yum install epel-release sudo yum install nginx 让nginx随系统启动而启动 sudo systemctl enable ...

  4. 防止ssh暴力破解的小工具denyhosts

    DenyHosts 简介 DenyHosts 是 Python 语言写的一个程序软件,运行于 Linux 上预防 SSH 暴力破解的,它会分析 sshd 的日志文件(/var/log/secure), ...

  5. 1+x 证书 Web 前端开发 css 专项练习

    官方QQ群 1+x 证书 Web 前端开发 css 专项练习 http://blog.zh66.club/index.php/archives/192/

  6. 给HttpClient添加请求头(HttpClientFactory)

    前言 在微服务的大环境下,会出现这个服务调用这个接口,那个接口的情况.假设出了问题,需要排查的时候,我们要怎么关联不同服务之间的调用情况呢?换句话就是说,这个请求的结果不对,看看是那里出了问题. 最简 ...

  7. python-3.8.0 新特性之赋值表达式

    [python-3.8.0 新特性之赋值表达式] 赋值表达式的语法是这样的“ name := expression ”,形式上看和赋值语句 “ = ” 差不多,就作用上来看也雷同.也就是说 “:=” ...

  8. Java开发桌面程序学习(七)——ImageView设置图片以及jar包读取fxml文件

    ImageView设置图片 JavaFx的ImageView,设置图片不能直接通过属性设置,只能通过代码来设置 ImageView设置图片 首先,我们让fxml对应的那个controller的java ...

  9. Shell(1)---变量

    Shell(1)---变量 初衷:学习shell的目的很简单,自己经常在linux服务器上做各种操作,而且基本上是一些相同的命令操作,所以就想通过shell脚本来启动就行,能够节省一定的开发时间,提高 ...

  10. Python打包成exe文件很难?一分钟即可学会,并添加图标!

    环境1.python 3.72.pyinstaller下载方式:2.1 python安装(略)2.2 安装pyinstaller打开DOS窗口输入以下命令:pip install pyinstalle ...