12.7默认虚拟主机
1新建虚拟主机的配置文件
1.3 创建网站数据目录
1.4 测试虚拟主机配置是否成功
12.8Nginx用户认证
1编辑虚拟主机配置文件
2 生成密码文件
3测试用户认证是否配置成功
12.9Nginx域名重定向
1 编辑配置文件
12.10Nginx访问日志
1配置访问日志格式
2测试日志配置是否成功
12.11Nginx日志切割
1 nginx日志按每分钟自动切割脚本如下:
2 配置任务计划
12.12静态文件不记录日志和过期时间
1 编辑配置文件
2测试静态配置文件是否成功
12.13Nginx防盗链
1 编辑配置文件
2测试配置文件是否成功
12.14Nginx访问控制
1 编辑配置文件根据IP访问控制
2 根据user_agent限制
12.15Nginx解析php相关配置
1编辑配置文件
2 测试nginx解析php是否成功
12.16 Nginx代理
10.1 编辑配置文件
10.2 测试代理是否配置成功
12.7默认虚拟主机
1 nginx的默认虚拟主机在用户通过IP访问,或者通过未设置的域名访问(比如有人把他自己的域名指向了你的ip)的时候生效。
2 新建虚拟主机的配置文件
//创建一个虚拟配置文件的目录
# mkdir /usr/local/nginx/conf/vhost
//编辑nginx配置文件加入include vhost/*.conf;
# vim nginx.conf
//创建一个虚拟主机配置文件
# vim test.com.conf
server
{
// 指定监听80端口,并将该虚拟主机设置为默认虚拟主机
listen 80 default_server;
// 设置服务器的名称
server_name aaa.com;
// 设置服务器默认网页
index index.html index.htm index.php;
// 设置服务器的根目录
root /data/www/default;}
1.3 创建网站数据目录
//创建网站数据目录
# mkdir -p /data/wwwroot/test.com
//创建网站首页
# vim /data/wwwroot/test.com/index.html
This is a nginx default page!
1.4 测试虚拟主机配置是否成功
//检测配置语法是否有问题,并重载配置文件
# /usr/local/nginx/sbin/nginx -t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successfu
# curl -x127.0.0.1:80 test.com
This is a nginx default page!
# curl -x127.0.0.1:80 www.111.com
This is a nginx default page!
12.8Nginx用户认证
1编辑虚拟主机配置文件
# vim /usr/local/nginx/conf/vhost/test.com.conf
location /1.php //定义需要认证的目录或者页面
{
auth_basic "Auth"; 定义用户名
auth_basic_user_file /usr/local/nginx/conf/htpasswd; 用户名密码文件
}
1.这里其实可以配置一个目录进行认证 location /upload 表示对upload进行认证2.location ~ admin.php 匹配php的访问路径
2 生成密码文件
//生成密码文件,可以使用Apache自带的htpasswd工具,如果没有就用Yum安装httpd
# yum install -y httpd
/新建一个aminglinux用户用来等一下进行用户认证
# htpasswd -c /usr/local/nginx/conf/htpasswd aminglinux
3测试用户认证是否配置成功
//新建一个1.php页面用来进行测试
# vim /data/wwwroot/test.com/1.php
//测试语法,并重置配置文件
# /usr/local/nginx/sbin/nginx -t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successfu
# /usr/local/nginx/sbin/nginx -s reload
//这里测试出现401出现了需要用户认证
# curl -x127.0.0.1:80 test.com/1.php -I
12.9Nginx域名重定向
1 编辑配置文件
# vim /usr/local/nginx/conf/vhost/test.com.conf
server
{
listen 80 default_server;
server_name test.com 111.com ;
index index.html index.htm index.php; root /data/wwwroot/test.com;
if ($host != 'test.com' ) {
rewrite ^/(.*)$ http://test.com/$1 permanent;
//表示不是test.com的域名来访问,都重定向到test.com
//permanent为永久重定向,状态码为301,如果写redirect则为302
2 测试配置文件是否成功
# /usr/local/nginx/sbin/nginx -t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
# /usr/local/nginx/sbin/nginx -s reload
12.10.Nginx访问日志
1nginx有一个非常灵活的日志记录模式。每个级别的配置可以有各自独立的访问日志。日志格式通过log_format命令来定义。
2 配置访问日志格式
# vim /usr/local/nginx/conf/nginx.conf
log_format combined_realip '$remote_addr $http_x_forwarded_for [$time_local]' ' $host "$request_uri" $status' ' "$http_referer" "$http_user_agent"';
$remote_addr, $http_x_forwarded_for(反向) 记录客户端IP地址
$remote_user 记录客户端用户名称
$request 记录请求的URL和HTTP协议
$status 记录请求状态
$body_bytes_sent 发送给客户端的字节数,不包括响应头的大小; 该变量与Apache模块mod_log_config里的“%B”参数兼容。$bytes_sent 发送给客户端的总字节数。
$connection 连接的序列号。
$connection_requests 当前通过一个连接获得的请求数量。
$msec 日志写入时间。单位为秒,精度是毫秒。
$pipe 如果请求是通过HTTP流水线(pipelined)发送,pipe值为“p”,否则为“.”。
$http_referer 记录从哪个页面链接访问过来的
$http_user_agent 记录客户端浏览器相关信息
$request_length 请求的长度(包括请求行,请求头和请求正文)。
$request_time 请求处理时间,单位为秒,精度毫秒; 从读入客户端的第一个字节开始,直到把最后一个字符发送给客户端后进行日志写入为止。
$time_iso8601 ISO8601标准格式下的本地时间。
$time_local 通用日志格式下的本地时间。
12.11 .Nginx日志切割
1nginx日志默认情况下统统写入到一个文件中,文件会变的越来越大,非常不方便查看分析。以日期来作为日志的切割是比较好的,通常我们是以每日来做统计的。
2 nginx日志按每分钟自动切割脚本如下:
# vim /usr/local/sbin/nginx_log.sh
# /bin/bash
# 日志保存位置
logdir='/usr/local/nginx/logs'
# 获取当前年信息和月信息
log_path=$(date -d yesterday +"%Y%m")
# 获取昨天的日信息day=$(date -d yesterday +"%d")
# 按年月创建文件夹mkdir -p $base_path/$log_path
# 备份昨天的日志到当月的文件夹
mv $base_path/access.log $base_path/$log_path/access_$day.log
# 输出备份日志文件名
# echo $base_path/$log_path/access_$day.log
# 通过Nginx信号量控制重读日志
kill -HUP `cat /usr/local/nginx/logs/nginx.pid`
5.3 配置任务计划
crontab –e 59 23 * * * bash /usr/local/sbin/nginx_log.sh #每天23:59分开始执行;
12.12静态文件不记录日志和过期时间
1在Apache配置的时候介绍了静态文件可以设置不记录日志的,那么在Nginx里面同样也可以把一些静态文件忽略掉,不记录日志。
2 编辑配置文件
#vim /usr/local/nginx/conf/vhost/test.com.conf
12.13Nginx防盗链
1 首先,为什么需要防盗链,因为有些资源存在竞争对手的关系,比如淘宝的商品图片,不会轻易的让工具来爬虫爬走收集。但是如果使用防盗链,需要知道上一个访问的资源,然后放入名单中进行判断。那么如何获取上一个访问的资源呢,可以通过valid_referers模块来实现.
2 编辑配置文件
[root@knightlai logs]# vim /usr/local/nginx/conf/vhost/test.com.conf
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
valid_referers none blocke server_names *.test.com;
if ($invalid_referer) {
return 404;
}
//valid_referers none blocked *.test.com;
就是白名单,允许文件链出的域名白名单,自行修改成您的域名!*.test.com这个指的是子域名,域名与域名之间使用空格隔开!
12.14Nginx访问控制
1 编辑配置文件根据IP访问控制
//编辑配置文件
# vim /usr/local/nginx/conf/vhost/test.com.conf
location /admin/
{
allow 192.168.139.168;
allow 127.0.0.1;
deny all;
}
# mkdir /data/wwwroot/test.com/admin
# vim /data/wwwroot/test.com/admin/1.html
12.15:nginx解析PHP
在LAMP中,PHP是作为httpd的一个模块出现的,只要PHP模块被加载,那么就能解析PHP脚本了。而在LNMP中,PHP是一个服务(php-fpm)的形式存在的,首先要启动php-fpm服务,然后Nginx再和php-fpm通信。
1.编辑配置文件
# vim /usr/local/nginx/conf/vhost/test.com.conf
location ~ \.php$ {
include fastcgi_params;
fastcgi_pass unix:/tmp/php-fcgi.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /data/wwwroot/test.com$fastcgi_script_name;
}
fastcgi_pass 用来指定php-fpm监听的地址或者socket
12.16 Nginx代理
1 编辑配置文件
//新建一个代理配置文件并写入参数
# cd /usr/local/nginx/conf/vhost/
]# vim proxy.conf
server
{
listen 80;
server_name www.linuxidc.com;
location / {
proxy_pass http://www.linuxidc.com;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
2.测试Nginx代理是否配置成功。
# /usr/local/nginx/sbin/nginx -t
#/usr/local/nginx/sbin/nginx -s reload
扩展
nginx.conf 配置详解
https://coding.net/u/aminglinux/p/nginx/git/tree/master/3z
nginx rewrite四种flag
http://unixman.blog.51cto.com/10163040/1711943
https://coding.net/u/aminglinux/p/nginx/git/blob/master/rewrite/break.md
502问题汇总 http://ask.apelearn.com/question/9109
location优先级 https://coding.net/u/aminglinux/p/nginx/git/blob/master/location/priority.md