1、nginx概念
Nginx 是由 Igor Sysoev 为俄罗斯访问量第二的 Rambler.ru 站点开发的,第一个公开版本0.1.0发布于2004年10月4日。其将源代码以类BSD许可证的形式发布,因它的稳定性、丰富的功能集、示例配置文件和低系统资源的消耗而闻名。
nginx是一个轻量级、高性能的web服务器软件和反向代理服务器。nginx以事件驱动(epoll)的方式编写的,所以有非常好的性能,同时也是一个非常高小的反向代理、负载均衡。但是nginx不支持cgi的方式运行,因为可以减少因此带来的程序上的漏洞。所以必须用fastCGI方式来执行的PHP程序。
2、nginx的官网
官网: http://nginx.org
需要什么版本可以选择下载
3、隐藏nginx版本号
3.1、查看百度的wed服务器
curl -I http://www.baidu.com
3.2、隐藏nginx服务器版本号
编译前的优化主要是用来修改程序名等等,目录是更改源码隐藏软件名称和版本号安装zlib-devel、pcre-devel等依赖包。
3.2.1解压nginx软件包
用tar命令将nainx解压到/usr/local/src下
tar zxf nginx-1.10.3.tar.gz -C /usr/local/src/
3.2.2、修改源码隐藏软件名称和版本号
1、进入nginx包中
cd /usr/local/src/nginx-1.10.3/
2、修改nginx.h文件
vim src/core/nginx.h
3、修改ngx_http_header_filter_module.c 文件
vim src/http/ngx_http_header_filter_module.c
4、修改ngx_http_special_response.c文件
这个文件定义了http错误码的返回,有时候我们也页面程序出现错误,nainx会带我们返回相应的错误代码,回显的时候带上nginx和版本号,我们要把们隐藏起来
vim src/http/ngx_http_special_response.c
4、安装nginx
4.1、安装nginx依赖包
yum install -y gcc gcc-c++ autoconf automake zlib zlib-devel openssl openssl-devel pcre pcre-devel
出现complete(完毕)安装完成
4.2、预编译
1、创建nginx运行账户www并将他加入到www组中,不允许www用户直接登录系统
groupadd www #添加www组
useradd -g www www -s /sbin/nologin #创建www用户然后将他入www组并且不允许他登录系统
2、增加编译时所需的模块
./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 | 启动webDav协议的支持。WebDAV是一种基于HTTP1.1协议的通信协议 |
--with-http_stub_status_module | 获取nginx的状态统计信息 |
--with-http_addition_module | 向响应内容中追加内容,比如想在站点底部追加一个js或者css,可以使用这个模块来实现。 |
--with-http_sub_module | 这个模块是一个过滤器,他修改网站中内容中的字符串。 |
--with-http_flv_module | 这个模块为Flash视频文件提供伪流服务器支持 |
--with-http_mp4_module | 这个模块提供了对MP4视频的播放支持,相关扩展名.mp4.m4.ma. |
--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查看帮助。
3、编译安装nginx
make && make install
4、启动nginx
/usr/local/nginx/sbin/nginx
5、用netstat命令查看是否启动nginx
netstat -anptl | grep 80
显示:80 端口正在间监听中 注:netstat安包是net-tools
5、测试是否隐藏nginx版本号
curl -I 192.168.1.16 #自己的ip地址
5.1网站测试
6、nginx配置文件 nginx.conf
在Nginx服务器的主配置文件nginx.conf中,包括全局配置、I/O事件配置、HTTP配置这三大块内容,配置语句的格式为”关键字 值;”(末尾以分号表示结束),以”#”开始的部分表示注释。
1)全局配置
由各种配置语句组成,不使用特定的界定标记。全局配置部分包括运行用户、工作进程数、错误日志、PID存放位置等基本设置。
常用配置项:
user nobody;
//运行用户,Nginx的运行用户实际是编译时指定的nginx,若编译时未指定则默认为nobody
worker_processes 2;
//指定nginx启动的工作进程数量,建议按照cpu数目来指定,一般为它的倍数
worker_rlimit_nofile 102400;
//这个指令是指当一个nginx进程打开的最多文件数目,理论值应该是最多打开文件数(ulimit -n)与nginx进程数相除,但是nginx分配请求并不是那么均匀,所以最好与ulimit -n的值保持一致。(通过”ulimit –n 数值”可以修改打开的最多文件数目)
error_log logs/error.log; //全局错误日志文件的位置
pid logs/nginx.pid; //PID文件的位置
2)I/O事件配置:
使用”events {}”界定标记,用来指定Nginx进程的I/O响应模型,每个进程的连接数等设置
events {
use epoll; //使用epoll模型,对于2.6以上的内核,建议使用epoll模型以提高性能
worker_connections 4096; //每个进程允许的最多连接数(默认为1024),每个进程的连接数应根据实际需要来定,一般在10000以下,理论上每台nginx服务器的最大连接数为worker_processes*worker_connections,具体还要看服务器的硬件、带宽等。
}
3)HTTP配置
使用”http{}”界定标记,包括访问日志、HTTP端口、网页目录、默认字符集、连接保持、以及虚拟主机、PHP解析等一系列设置。其中大部分配置语句包含在子界定标记”server {}”内。
http {
#设定媒体类型,include 只是一个在当前文件中包含另一个文件内容的指令。
include mime.types;
default_type application/octet-stream; //默认媒体类型足够。
#设定日志格式
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
#设定access log
access_log logs/access.log main;
keepalive_timeout 65; //连接保持超时
#设定虚拟主机
server { //用来配置虚拟主机
listen 80; //WEB服务的监听设置,可以采用”IP地址:端口”形式
server_name www.lnmp.com;//网站名,称可以写多个名称,用空格分隔
location / { //表示如何匹配后面的路径的
index index.html; //默认首页
root html; //网页根目录位置,默认为Nginx安装目录下的html/子目录,root语句用来设置特定访问位置的网页文档路径,根据需要可改为/var/www/html等其他路径。
}
charset gb2312; //网页的默认字符集
#设定本虚拟主机的访问日志
access_log logs/www.lnmp.com.access.log main;
error_page 500 502 503 504 /50x.html; //内部错误的反馈页面
location = /50x.html {
root html;
}
}
}
将用户修改成刚才所创建的www用户
6.1查看nginx当前运行账号
ps -aux | grep nginx
6.2增加path变量
创建一个软连接
ln -s /usr/local/nginx/sbin/* /usr/local/bin/
6.3重载nginx
用 -h选项查看nginx的选项帮助
nginx -h
nginx -t #语法检测
显示syntax is ok 语法是可以的
nginx -s reload # 重载nginx
在这里我们还可以看到在查看的时候,worker进程是www用户了,但是master进程还是root
其中,master是监控进程,也叫主进程,worker是工作进程.
master监控进程使用root,也可以是降级使用普通用户,如果都是用普用户,那么编译安装的时候,是用普通用户执行,sudo方式操作,可以直接理解为master是管理员,worker进程才是为用户提供服务的!