一、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文件。