目录
1、 Nginx简介
Nginx ("engine x") 是一个轻量级、高性能的WEB服务器软件和反向代理服务器(即用户直接访问反向代理服务器就可以获得目标服务器的资源)。Nginx 是由 Igor Sysoev 为俄罗斯访问量第二的 Rambler.ru 站点开发的,第一个公开版本0.1.0发布于2004年10月4日。其将源代码以类BSD许可证的形式发布,因它的稳定性、丰富的功能集、示例配置文件和低系统资源的消耗而闻名。
Nginx以事件驱动(epoll)的方式编写,所以有非常好的性能,同时也是一个非常高效的反向代理、负载平衡。但是Nginx并不支持cgi方式运行,原因是可以减少因此带来的一些程序上的漏洞。所以必须使用FastCGI方式来执行PHP程序。
由于Nginx本身的一些优点,轻量,开源,易用,越来越多的公司使用nginx作为自己公司的web应用服务器,如百度BWS、新浪、网易、腾讯等。本文详细介绍nginx源码安装的同时并对nginx进行优化配置。
nginx的优点:
1.高并发。静态小文件
2.占用资源少。2万并发、10个线程,内存消耗几百M。
3.功能种类比较多。web,cache,proxy。
4.支持epoll模型,使得nginx可以支持高并发。
5.nginx 配合动态服务和Apache有区别。(FASTCGI 接口)
6.利用nginx可以对IP限速,可以限制连接数。
7.配置简单,更灵活。
1.1、Nginx官网
Nginx官网: http://nginx.org
Nginx官方文档: http://nginx.org/en/docs/
Nginx官网下载地址: http://nginx.org/en/download.html
2、隐藏nginx版本号
问:为什么要隐藏??
答:为了安全,如果暴露版本信息,有可能黑客可以通过版本信息,得知该版本存在的漏洞,进而对服务器进行攻击。
2.1、安装部署nginx
2.1.1、上传软件包并解压
[root@cong11 ~]# ls
anaconda-ks.cfg nginx-1.10.3.tar.gz
[root@cong11 ~]# tar -zxvf nginx-1.10.3.tar.gz -C /usr/local/src/
2.1.2、更改源码隐藏软件名称和版本号
[root@cong11 ~]# cd /usr/local/src/nginx-1.10.3/
[root@cong11 nginx-1.10.3]# vim src/core/nginx.h
修改标红部分
#define NGINX_VERSION "8.8.8" #修改版本号
#define NGINX_VER "web/" NGINX_VERSION #修改服务器名称
[root@cong11 nginx-1.10.3]# vim src/http/ngx_http_header_filter_module.c
static char ngx_http_server_string[] = "Server: web" CRLF; #修改标红部分
#修改HTTP头信息中的server字段,防止回显具体版本号
这个文件定义了http错误码的返回,有时候我们页面程序出现错误,Nginx会代我们返回相应的错误代码,回显的时候,会带上nginx和版本号,我们把他隐藏起来.
"<hr><center>" NGINX_VER "</center>" CRLF #老版本这里需要修改为web,现在这里不需要修改,因为它调用了NGINX_VER变量
"<hr><center>web</center>" CRLF
2.2、安装nginx依赖
[root@cong11 nginx-1.10.3]# yum install -y gcc gcc-c++ autoconf automake zlib zlib-devel openssl openssl-devel pcre pcre-devel
2.3、预编译
创建添加www组
[root@cong11 ~]# groupadd www
创建nginx运行账户www并加入到www组,不允许www用户直接登录系统。
[root@cong11 ~]# useradd -g www www -s /sbin/nologin
指明nginx的安装目录及需要用到的模块
[root@cong11 nginx-1.10.3]# ./configure --prefix=/usr/local/nginx --with-http_dav_module --with-http_stub_status_module --with-http_addition_module --with-http_sub_module --with-http_flv_module --with-http_mp4_module --with-pcre --with-http_ssl_module --with-http_gzip_static_module --user=www --group=www
--with-http_dav_module # nginx 编译时通过加入“--with-http_dav_module”可以启用对WebDav协议的支持。WebDAV (Web-based Distributed Authoring and Versioning) 一种基于 HTTP 1.1协议的通信协议。它扩展了HTTP 1.1,在GET、POST、HEAD等几个HTTP标准方法以外添加了一些新的方法,使应用程序可直接对Web Server直接读写,并支持写文件锁定(Locking)及解锁(Unlock),还可以支持文件的版本控制。即ngx_http_dav_module模块用于通过 WebDAV 协议进行文件管理自动化。该模块处理 HTTP 和 WebDAV 的 PUT、DELETE、MKCOL、COPY 和 MOVE 方法。
--with-http_stub_status_module #获取Nginx的状态统计信息
--with-http_addition_module #向响应内容中追加内容,比如想在站点底部追加一个js或者css,可以使用这个模块来实现,即模块ngx_http_addition_module在响应之前或者之后追加文本内容。
--with-http_sub_module # ngx_http_sub_module模块是一个过滤器,它修改网站响应内容中的字符串,比如你想把响应内容中的‘iuwai’全部替换成‘aaaaa‘,这个模块已经内置在nginx中,但是默认未安装,需要安装需要加上配置参数:--with-http_sub_module
--with-http_flv_module #该ngx_http_flv_module模块为Flash视频(FLV)文件提供伪流服务器端支持。它会根据指定的 start 参数来指定跳过多少字节,并在返回数据前面附上 FLV 头。
location ~ \.flv$ {
flv;
}
curl localhost/index.flv?start=10
该请求的意思是,从视频文件 index.flv 第10个字节开始读取返回,并在返回的数据上附上 FLV 头。
--with-http_mp4_module #模块提供了对 MP4 视频的播放支持,相关的扩展名 .mp4 .m4v .m4a。
--with-http_ssl_module #启用ngx_http_ssl_module
--with-pcre # 支持正则表达式
注:如果pcre是通过编译安装的话,例如
# tar zxvf /usr/local/src/pcre-8.36.tar.gz -C /usr/local/src/
# cd /usr/local/src/pcre-8.36
# ./configure && make && make install
则--with-pcre=/usr/local/src/pcre-8.36 #需要注意,这里指的是源码,用./configure --help |grep pcre查看帮助。
2.4、预编译安装
[root@cong11 nginx-1.10.3]# make && make install
2.5、启动nginx
[root@cong11 ~]# /usr/local/nginx/sbin/nginx
2.6、查看端口号
[root@cong11 ~]# /usr/local/nginx/sbin/nginx
可以看到nginx已经成功启动,接下来我们使用curl命令测试服务名和版本号有没有成功隐藏
2.7、测试
[root@cong11 ~]# curl -I 192.168.121.60
可以看到服务名和版本号都改成了我们修改后的
2.8、网站测试
在浏览器输入我们nginx服务器的ip地址测试是否可以成功访问
2.9、配置文件nginx.conf
- 全局配置
Nginx服务器的主配置文件nginx.conf中,包括全局配置、I/O事件配置、HTTP配置这三大块内容,配置语句的格式为”关键字 值;”(末尾以分号表示结束),以”#”开始的部分表示注释。
常用配置项:
user nobody;//运行用户,Nginx的运行用户实际是编译时指定的nginx,若编译时未指定则默认为nobody
worker_processes 2;//这个指令是指当一个nginx进程打开的最多文件数目,理论值应该是最多打开文件数(ulimit -n)与nginx进程数相除,但是nginx分配请求并不是那么均匀,所以最好与ulimit -n的值保持一致。(通过”ulimit –n 数值”可以修改打开的最多文件数目)
error_log logs/error.log; //全局错误日志文件的位置
pid logs/nginx.pid; //PID文件的位置
- I/O事件配置
使用”events {}”界定标记,用来指定Nginx进程的I/O响应模型,每个进程的连接数等设置
events {
use epoll;//使用epoll模型,对于2.6以上的内核,建议使用epoll模型以提高性能
worker_connections 4096;//每个进程允许的最多连接数(默认为1024),每个进程的连接数应根据实际需要来定,一般在10000以下,理论上每台nginx服务器的最大连接数为worker_processes*worker_connections,具体还要看服务器的硬件、带宽等。
}