nginx全面的配置和调优

一、nginx相关介绍
nginx是如今应用比较广法的web程序,它是支持模块化的,若是不指定安装,默认最小安装,若是须要实现某些特定的功能,只需安装相应的模块便可。它很好地节约了所占用的内存资源。
二、nginx安装前设置
nginx安装通常都会选择源码包编译安装,源码包安装的好处是不容易出现漏洞,能够作个性化设置,好比,能够在源码包安装以前,隐藏或修改所使用的web服务器及其版本。nginx隐藏版本的方法以下:javascript

(1)在安装以前,进入到nginx源码包中的src/目录中,修改nginx头文件:./src/core/nginx.h   +13 #define nginx_version
#define NGINX_VERSION  "1.12.2"
#define NGINX_VER  "nginx/"  NGINX_VERSION
#define NGINX_VAR "NGINX"
(2)vim +48 src/http/ngx_http_header_filter_modle.c 文件中的nginx相关的字样
static u_char ngx_http_server_string[ ]="server:nginx"
(3)修改错误网页的底部提示信息(也能够经过修改错误网页的内容来修改)
vim /src/http/ngx_http_special_response.c
static u_char ngx_http_error_tail[  ]=  

就上面的信息,按照本身的需求修改掉便可,有人说为什么要隐藏版本信息,由于可能有些人知道哪些web服务的某些版本存在bug,隐藏信息是为了安全考虑。
三、源码编译安装
(1)设置一个用户为nginx,bash为noligin,也是为了安全考虑,防止用root帐户去关联上nginx,若是有人经过nginx这个服务×××系统,也不能登陆到系统中来。
(2)源码编译安装
tar解包---./configure配置,根据报错安装相应的依赖包-----make编译-------make install。php

在./configure中能够配置相信的参数:
--prefix  /usr/local/nginx 安装目录
--user nginx 指定用户
--group nginx  指定组
--with  模块   指定安装哪些模块
--without  模块  指定不安装哪些模块

(3)设置软链接及开机启动css

ln -s /usr/local/nginx/sbin/nginx    /sbin/
echo "nginx"  >> /etc/rc.d/rc

四、经过修改配置文件来调优及控制安全
vim /usr/local/nginx/conf/nginx.conf
(1)设置worker最大并发链接数,默认为1024html

events {
    worker_connections  65535;
        }

#改完这个以后还要修改ulimit -Hn/Sn 或者修改配置文件:/etc/security/limits.conf
(2)限制并发,防止doc×××前端

http {
……
limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;
……
server {
limit_req zone=one burst=5;       //当同一地址同一时间发来的链接数超过5个数以后的请求则再也不处理。
}
}

(3)拒绝非法请求
通常网页的访问请求中,GET和POST这两个请求为正常的,其余的请求都不算正常的大众请求,这样的请求要拒绝掉。GET——请求指定的页面信息,并返回实体主体;POST——向指定资源提交数据进行处理,如上传文件等。java

server {
……
if  ($request_method   !~^(GET|POST)$) {
return 444;
}
……
}
null

(4)防止buffer溢出nginx

http{
……
client_body_buffer_size 8k;
client_header_buffer_size 1k;
client_max_body_size 16k;
large_client_header_buffers  4 4k;     //后面的参数能够按照实际状况修改。
server {
……
} }

五、nginx配置文件实现不一样的功能
(1)动静分离
把配置文件中下面的这一段注释打开web

location ~ \.php$ {   #作动静分离,动态网站走这.
        root           html;
        fastcgi_pass   127.0.0.1:9000;
        fastcgi_index  index.php;   
        include        fastcgi.conf;
    }

(2)支持加密的web网页==>https
须要安装--with-http_ssl_module模块,而后把443 ssl那一段的配置前面的注释去掉。
(3)支持4层反向代理json

http {
……
upstream webs{
server 192.168.2.100:80  weight=2 max_fails=2 fail_timeout=10;
server 192.168.2.200:80  weight=1 max_fails=1 fail_timeout=10;
}
server {
……
        location / {
    proxy_pass http://webs;
    ……
把前端的请求转达给后端的web服务器。
#weight 为权重;max_fails 为最大失败次数;fail_timeout失败超时时间,单位为秒.

(4)支持地址重写
好比公司网页的域名改了,可是用户已经习惯用原来的域名来访问公司的web网页了,这个时候就须要用到地址重写,让用户访问a网页时自动调转到b网页vim

rewrite /a.html     /b.html   redirect临时(permament永久);     //a网页转成b网页
rewrite ^/(.*) http://www.baidu.com/$1;   //整个网站转发

(5)网页的监控
若是公司没有用到zabbix等监控软件,能够用--with-http_stub_status_module这个模块来实现对nginx网页的健康监控。

server {
……
location /status {
    stub_status on; 
    allow ip;(写本身的ip,管理员看)
    deny all;
} }
能够经过curl http://ip/status 来查看网页的信息

(6)支持不一样的请求来源给不一样的页面
例以下面写的,若是是firefox这个浏览器来的访问,就给它/firefox下面的网页。

server {
……
    if ($http_user_agent ~* firefox){
    rewirte ^/(.*)$  /firefox/$1;
    } 
    ……
    }

(7)支持设置客户端缓存

server {
……
    location ~* \.(jpg|png|js|xml|ico|css|gif|jpeg)$ {
    expires 30d;   #定义客户端缓存哪些东西及缓存时间
    }
    ……
    }

(8)设置工做进程数

worker_processes 1;
设置为与cpu内核数量一致。
(9)支持对网页进行压缩处理

http {
……
gzip on;    //开启压缩
gzip_min_length 1000;   //小文件布压缩,越压缩越大。
gzip_comp_level 4;  //压缩比率
gzip_types text/plain  text/css application/json application/x-javascript application/xml text/xml application/xml+rss text/javascript;
}

压缩比率从1~9,数字越高压缩效果越好,可是压缩时间越长。对特定文件压缩,通常mp3/mp4/图片等不要压缩,它们都是压缩了的。通常压缩文档类字符。类型参考配置文件下面的mime.types文件。

相关文章
相关标签/搜索