第一章
1.1、HTTP功能模块
Nginx模块化:耦合度更低,易于管理。工作中做事学会低耦合
SQA架构。RPC服务都属于低耦合的技术模式。
1.2、Nginx的目录结构说明
1.3、Nginx主配置文件nginx.conf
1.4、Nginx其他配置文件
Nginx配合PHP动态服务相关配置文件为:fastcgi.conf、fastcgi_params。
Nginx配合Python动态服务相关配置文件为:uwsgi_params。
第二章、虚拟主机配置实践
2.1、虚拟主机类型
常见的虚拟主机类型:
基于域名的虚拟主机;通过不同的域名区分不同的虚拟主机,企业应用最广,对外提供服务的网站都是使用基于域名的虚拟主机,
例如www.etianxtian.org
基于端口的虚拟主机:通过不同的端口来区分不同的虚拟主机,此类虚拟主机对应企业内部的网站,
例如www.etiantian.org:9000
基于IP的虚拟主机:通过不同的 IP区分不同的虚拟主机,企业应用少,一般不同业务需要使用多IP的场景都会在负载均衡器上进行Vip绑定,而不是在web上通过绑定IP区分不同的虚拟主机
2.2、实践基于域名的虚拟主机
cd /application/nginx/conf/
egrep -v "^$|#" nginx.conf.default >nginx.conf
vim nginx.conf(修改域名和站点目录)
mkdir ../html/www
echo "www.etiantian.org" >../html/www/index.html
cat ../html/www/index.html
echo "10.0.0.8 www.etiantian.org" >>/etc/hosts
tail -1 /etc/hosts
echo 'export PATH="/application/nginx/sbin/:$PATH"'>>/etc/profile
tail -1 /etc/profile
. /etc/profile
nginx -t
nginx -s reload
curl www.etiantian.org
vim nginx.conf
mkdir ../html/{bbs,blog}
echo "bbs.etiantian.org" >../html/bbs/index.html
echo "blog.etiantian.org" >../html/blog/index.html
cat ../html/blog/index.html
cat ../html/bbs/index.html
nginx -t
nginx -s reload
vim /etc/hosts
curl bbs.etiantian.org
curl blog.etiantian.org
2.2、基于端口的虚拟主机
vim nginx.conf(修改后两个端口为81和82)
netstat -lntup |grep nginx
nginx -t
nginx -s reload
netstat -lntup |grep nginx
curl bbs.etiantian.org:81
curl bbs.etiantian.org:82
curl bbs.etiantian.org
curl bbs.etiantian.org:82
虚拟主机通信原理
2.3、基于IP的虚拟主机
ip addr add 10.0.0.9 dev eth0 label eth0:9
ip addr add 10.0.0.10 dev eth0 label eth0:10
ifconfig
vim nginx.conf(修改IP地址)
nginx -t
nginx -s reload
netstat -lntup |grep nginx
curl 10.0.0.7
curl 10.0.0.9
curl 10.0.0.10
2.4、配置虚拟主机的步骤
1)增加一个完整的server标签段到结尾处。放入http标签。
2)更改server_name及对应的root根目录,如果需要其他参数,可以增加或修改。
3)创建server_name域名及对应网页的根目录,并且建立测试文件,如果没有index首页,访问会出现403错误。
4)检查nginx配置文件语法,平滑重启nginx服务,快速检查启动结果。
5)在客户端对server_name处配置的域名做hosts解析或DNS配置,并检查(ping域名看返回的IP是否正确)。
6)在Win32浏览器中输入地址访问,或者在Linux客户端做hosts解析,用wget或curl接地址访问。
第三章、恶意域名解析
3.1、什么是恶意域名解析
一般情况下,要使域名能访问到网站需要两步,
第一步,将域名解析到网站所在的主机,
第二步,在web服务器中将域名与相应的网站绑定。但是,如果通过主机IP能直接访问某网站,那么把域名解析到这个IP也将能访问到该网站,而无需在主机上绑定,也就是说任何人将任何域名解析到这个IP就能访问到这个网站。
3.2、恶意域名解析的危害
可能您并不介意通过别人的域名访问到您的网站,但是如果这个域名是未备案域名呢?
假如那域名是不友善的域名,比如曾经指向非法网站,容易引发搜索引擎惩罚,连带IP受到牵连。即使域名没什么问题,但流量也会被劫持到别的域名,从而遭到广告联盟的封杀。
3.3、如何防止恶意域名解析,配置里第一个标签如下配置
server{
listen 80;
server_name _default;
return 500;
}
第四章、优化nginx配置文件
mkdir extra
sed -n '11,18p' nginx.conf
sed -n '11,18p' nginx.conf >extra/01_www.conf
sed -n '19,26p' nginx.conf
sed -n '19,26p' nginx.conf >extra/02_bbs.conf
sed -n '27,34p' nginx.conf
sed -n '27,34p' nginx.conf >extra/03_blog.conf
sed -n '11,34p' nginx.conf
sed -i '11,34d' nginx.conf
sed -i '11 i include extra/01_www.conf;\ninclude extra/02_bbs.conf;\ninclude extra/03_blog.conf;' nginx.conf
cat nginx.conf
nginx -s stop
nginx
netstat -lntup |grep nginx
nginx -s reload
curl www.etiantian.org
curl bbs.etiantian.org
curl blog.etiantian.org
第五章、Nginx虚拟主机的别名配置
vim 01_www.conf
nginx -t
nginx -s reload
cat /etc/hosts
curl etiantian.org
第六章、Nginx状态信息功能实践
6.1、信息功能介绍
Nginx软件的功能模块中有一个ngx_http_stub_status_module模块,
这个模块的主要功能是记录Nginx的基本访问状态信息,让使用者了解Nginx的工作状态,例如:连接数等信息
要想使用状态模块,在编译Nginx时必须增加http_stub_status_module支持。
6.2、配置Nginx status
nginx -V
vim extra/04_status.conf
sed -i '14 i include extra/04_status.conf;' nginx.conf
cat -n nginx.conf
nginx -t
nginx -s reload
第七章、Nginx配置日志
7.1、为Nginx诊治国家错误日志(error_log)配置
7.2、Nginx访问日志
7.21、Nginx访问日志介绍
Nginx软件会把每个用户访问网站的日志信息记录到指定的文件里,供网站提供者分析用户的浏览行为,此功能由ngx_http_log_module模块负责
7.22、Nginx访问日志参数
Nginx日志格式中默认的参数配置
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
Nginx记录日志的默认参数配置
access_log logs/access_www.log main;
nginx -s stop
nginx
curl www.etiantian.org
cat ../logs/access_www.log
7.23、访问日志轮询切割
cd /application/nginx/logs
mv access_www.log access_www_$(date +%F).log
ls
vim /server/scripts/cut_nginx_log.sh
#!/bin/sh
Dateformat=`date +%Y%m%d`
Basedir="/application/nginx"
Nginxlogdir="$Basedir/logs"
Logname="access_www"
[ -d "$Nginxlogdir" ] && cd $Nginxlogdir || exit 1
[ -f "${Logname}.log" ]||exit 1
/bin/mv ${Logname}.log ${Dateformat}_${Logname}.log
$Basedir/sbin/nginx -s reload
crontab -e
#cut log by wanwan for gongzuo
00 00 * * * /bin/sh sh server/scripts/cut_nginx_log.sh &>/dev/null