目录
1.1Nginx
Nginx ("engine x") 是一个轻量级、高性能的WEB服务器软件和反向代理服务器。
web应用 分为:
静态资源:文本文件,或图片,音频和视频等等
动态资源:使用编程语言开发的通常要链接数据库和数据库交互
nginx默认提供静态资源访问,需使用fastcgi来执行使用动态资源
Nginx以事件驱动(epoll)的方式编写,所以有非常好的性能,同时也是一个非常高效的反向代理、负载平衡。但是Nginx并不支持cgi方式运行,原因是可以减少因此带来的一些程序上的漏洞。所以必须使用FastCGI方式来执行PHP程序。
1.2Nginx官网
Nginx官网: http://nginx.org
Nginx官方文档: nginx documentation
Nginx官网下载地址: nginx: download
1.3tengine:
Tengine是由阿里淘宝网发起的Web服务器项目。它在Nginx的基础上,针对大访问量网站的需求,添加了很多高级功能和特性。,在遵循GPL的原则上进行二次开发,在nginx基础上进行改进。
2.隐藏nginx版本号
2.1查看百度web应用
clurl命令访问web网站
HTTP协议端口号默认是80端口
图中200 OK 是web应答状态码200代表访问成功的状态码
server:是web用于的隐藏web软件名称和版本号
2.2隐藏nginx服务器版本号
编译前的优化主要是用来修改程序名等等,目的更改源码隐藏软件名称和版本号,安装zlib-devel、pcre-devel等依赖包。
2.3上传软件包解压
tar -zxvf nginx-1.10.3.tar.gz -C /usr/local/src/ #解压到/usr/local/src/下
2.4更改源码隐藏软件名称和版本号
cd /usr/local/src/nginx-1.10.3/
vim src/core/nginx.h
13 #define NGINX_VERSION "8.8.8" #修改版本号
14 #define NGINX_VER "web/" NGINX_VERSION #修改服务器名称
vim src/http/ngx_http_header_filter_module.c
49 static char ngx_http_server_string[] = "web" CRLF; 修改标红部分
修改HTTP头的信息中的server字段,防止回显版本号
[root@localhost nginx-1.10.3]# vim src/http/ngx_http_special_response.c
http错误码的返回,有时候我们页面程序出现错误,Nginx会代我们返回相应的错误代码,回显的时候,会带上nginx和版本号,我们把他隐藏起来.
22 "<hr><center>" NGINX_VER "</center>" CRLF 老版本这里需要修改为web,现在这里不需要修改,因为它调用了NGINX_VER变量
29 "<hr><center>nginx</center>" CRLF #将nginx修改
2.3安装nginx依赖包
yum install -y gcc gcc-c++ autoconf automake zlib zlib-devel openssl openssl-devel pcre pcre-devel
2.4预编译
groupadd www #添加www组
[root@web ~]# useradd -g www www -s /sbin/nologin #创建nginx运行账户www并加入到www组,不允许www用户直接登录系统。
创建nginx模块:
[root@web 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编译时可通过启用对webdave的支持,WebDAV一种基于 HTTP 1.1版本协议的通信协议,在GET、POST、HEAD等几个HTTP标准方法
--with-http_stub_status_module 获取nginx的状态信息
--with-http_addition_module 向相应内容中追加内容,比如想在站点底部追加一个js或者css(样式),在相应前或后追加文本内容
--with-http_sub_module 它是个过滤模块,修改网站响应内容中的字符串
--with-http_flv_module 为Flash视频(FLV)文件提供伪流服务器端支持
--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.5编译安装
make && make install
2.6启动nginx
/usr/local/nginx/sbin/nginx
2.7查看端口号
netstat -antup | grep 80
netstat 安装包是:net-tools
正在监听80端口
3.测试版本号、名称是否隐藏
curl -I 192.168.30.150 我这里测试的是自己本机的IP
可以看到版本和服务器名称隐藏
3.1网站测试
测试成功,进入到nginx默认首页
4.配置文件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事件配置:
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;
}
}
}
5.修改nginx运行账号
编译安装时nginx时若不指定--user=, --group=选项,默认是nobody用户。
5.1查看nginx当前运行账号
ps -aux | grep nginx
master是主进程
worker是工作进程
可以理解为工作进程是提供服务的
可以看到的是我们在编译安装指定用户是www, 默认是nobody用户
5.2创建nginx程序账号
useradd -M -s /sbin/nologin www
引之前创建过所以无需创建
5.3修改nginx运行账号
vim /usr/local/nginx/conf/nginx.conf
改:
#user nobody;
为:
user www;
5.4添加path环境变量
ln -s /usr/local/nginx/sbin/* /usr/local/bin/
5.5重载nginx
使用nginx -h 查看nginx选项信息
nginx -t #语法检测
nginx -s reload # 重载nginx
nginx -v
显示版本号和服务器名称,隐藏则显示隐藏名称
nginx -V(大写)
显示版本号、服务器名称、编译时使用的模块信息