一、Nginx默认虚拟主机
二、Nginx用户认证
三、Nginx域名重定向
四、Nginx访问日志
五、Nginx日志切割
六、静态文件不记录日志和过期时间
七、Nginx防盗链
八、Nginx访问控制
九、Nginx解析php的配置
十、Nginx代理
一、Nginx默认虚拟主机
vim /usr/local/nginx/conf/nginx.conf //进入nginx配置文件,修改如下操作
增加如下内容
cd /usr/local/nginx/conf/ //进入该目录创建vhost目录,编辑文件aaa.com.conf
vim aaa.com.conf //编辑如下内容
server
{
listen 80 default_server; // 有这个标记的就是默认虚拟主机
server_name aaa.com;
index index.html index.htm index.php; //指定索引页
root /data/wwwroot/default; //指定网站的根目录
}
mkdir /data/wwwroot/default //创建网站目录
cd /data/wwwroot/default/ //进入网站目录
创建一个index.html文件,编辑如下内容
/usr/local/nginx/sbin/nginx -t //测试虚拟主机配置文件是否正确
/usr/local/nginx/sbin/nginx -s reload //重新加载配置
区分虚拟主机
支持include语法和apache类似
二、Nginx用户认证
进入虚拟主机目录
vim test.com.conf //编辑虚拟主机
生成密码文件
使用apache生成密码文件的工具,由于系统已经安装过apache服务,所有可以直接使用命令,如无安装,执行yum install -y httpd安装即可
查看生成密码文件,再次创建用户名和密码无需加-c参数
测试配置文件是否正确,重新加载配置文件
测试访问
指定用户名和密码访问,显示404
因为/data/wwwroot/test.com/这个目录还未创建
mkdir /data/wwwroot/test.com //创建该目虚拟主机目录
echo "test.com" > /data/wwwroot/test.com/index.html //编辑index.html文件
curl -uabc:123456 -x127.0.0.1:80 test.com //重新访问,这种用户认证是针对整个站点
此时需要对目录做用户认证(例:admin目录)
vim /usr/local/nginx/conf/vhost/test.com.conf //编辑虚拟主机
测试配置文件并加载配置文件
测试访问test.com站点无需指定用户名密码,访问admin目录显示401,需要用户名和密码认证
创建admin目录并编辑index.html文件
对admin.php做用户认证
vim /usr/local/nginx/conf/vhost/test.com.conf //编辑虚拟主机
重新加载配置文件
测试
三、Nginx域名重定向
vim /usr/local/nginx/conf/vhost/test.com.conf //编辑虚拟主机
server
{
listen 80;
server_name test.comtest1.comtest2.com;
index index.html index.htm index.php;
root /data/wwwroot/test.com;
if ($host != 'test.com' ) {
rewrite ^/(.*)$ http://test.com/$1 permanent;
}
}
server_name后面支持写多个域名,这里要和httpd的做一个对比
permanent为永久重定向,状态码为301,如果写redirect则为302
重新加载配置文件
测试
四、Nginx访问日志
日志格式
vim /usr/local/nginx/conf/nginx.conf //搜索log_format
字段含义
除了在主配置文件nginx.conf里定义日志格式外,还需要在虚拟主机配置文件中增加
vim /usr/local/nginx/conf/vhost/test.com.conf //编辑虚拟主机配置文件,增加如下内容
access_log /tmp/test.com.log combined_realip;
这里的combined_realip就是在nginx.conf中定义的日志格式名字
重新加载配置文件
测试访问,并查看访问日志
五、Nginx日志切割
自定义shell 脚本
vim /usr/local/sbin/nginx_log_rotate.sh //写入如下内容
#! /bin/bash
## 假设nginx的日志存放路径为/tmp/
d=`date -d "-1 day" +%Y%m%d`
logdir="/tmp/"
nginx_pid="/usr/local/nginx/logs/nginx.pid"
cd $logdir
for log in `ls *.log`
do
mv $log $log-$d
done
/bin/kill -HUP `cat $nginx_pid`
执行脚本
查看/tmp/目录
find /tmp/ -name *.log-* -type f -mtime +30 |xargs rm //删除30天前tmp目录下*.log-*类型的文件
find /tmp/ -name *.log-* -type f //查找tmp目录下*.log-*类型的文件
crontab -e //加入任务计划,每天凌晨0点执行该脚本
六、静态文件不记录日志和过期时间
vim /usr/local/nginx/conf/vhost/test.com.conf //进入虚拟主机配置文件,增加如下内容
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
{
expires 7d;
access_log off;
}
location ~ .*\.(js|css)$
{
expires 12h;
access_log off;
}
重新加载配置文件
cd /data/wwwroot/test.com/ //进入网站根目录,创建1.gif和2.js,并编辑内容,模拟测试效果
测试结果显示,不记录访问1.gif和2.js的记录
只匹配js结尾的,所以会记录日志
vim /usr/local/nginx/conf/vhost/test.com.conf //进入虚拟主机配置文件,修改如下内容
重新加载配置文件
七、Nginx防盗链
vim /usr/local/nginx/conf/vhost/test.com.conf // 配置如下,可以和静态文件不记录日志和过期时间的配置结合起来
location ~* ^.+\.(gif|jpg|png|swf|flv|rar|zip|doc|pdf|gz|bz2|jpeg|bmp|xls)$
{
expires 7d;
valid_referers none blocked server_names *.test.com ;
if ($invalid_referer) {
return 403;
}
access_log off;
}
重新加载配置文件
测试
八、Nginx访问控制
需求:访问/admin/目录的请求,只允许某几个IP访问,配置如下:
location /admin/
{
allow 127.0.0.1;
allow 192.168.0.236;
deny all;
}
vim /usr/local/nginx/conf/vhost/test.com.conf //编辑如下内容
重新加载配置文件
测试访问正常,其他IP访问显示403
可以匹配正则,禁止上传图片的目录解析php
vim /usr/local/nginx/conf/vhost/test.com.conf //编辑如下内容
location ~ .*(upload|image)/.*\.php$
{
deny all;
}
重新加载配置文件
mkdir /data/wwwroot/test.com/upload //创建目录
echo "1111" > /data/wwwroot/test.com/upload/1.php //编辑php文件
curl -x127.0.0.1:80 test.com/upload/1.php //访问目录文件
根据user_agent限制
vim /usr/local/nginx/conf/vhost/test.com.conf //编辑虚拟主机配置文件
if ($http_user_agent ~ 'Spider/3.0|YoudaoBot|Tomato')
{
return 403;
}
重新加载配置文件
测试,指定user_agent访问
九、Nginx解析php的配置
配置如下:
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
编辑3.php文件,内容如下
先不加载配置,访问该目录显示源代码
加载配置文件,再次访问,显示网页信息
502错误排查
vim /usr/local/nginx/conf/vhost/test.com.conf //修改一下配置
重新加载配置文件,再次访问显示502,原因是因为配置文件找不到sock文件
查看错误日志,提示没有该文件
查看php配置文件信息
vim /usr/local/php-fpm/etc/php-fpm.conf //修改php配置文件,改为监听ip和端口
重新加载配置我文件,并重启php服务,测试php配置文件是否正确
查看监听的IP和端口
重新测试,显示502
查看日志,依旧显示路径不存在
vim /usr/local/nginx/conf/vhost/test.com.conf //编辑虚拟主机配置文件
重新加载php和nginx的配置文件,访问正常
vim /usr/local/php-fpm/etc/php-fpm.conf //编辑php配置文件
重新加载配置我文件,查看文件权限为440
vim /usr/local/nginx/conf/vhost/test.com.conf //修改虚拟主机配置文件
重新加载配置文件,访问该目录显示502
tail /usr/local/nginx/logs/nginx_error.log //查看错误日志,提示权限问题,拒绝访问
临时更改/tmp/php-fcgi.sock文件所属用户
curl -x127.0.0.1:80 test.com/3.php //重新访问正常
vim /usr/local/php-fpm/etc/php-fpm.conf //还原配置文件
重启配置文件,666权限表示可以让所有用户读写
还有一种502情况,php-fpm服务资源耗尽
十、Nginx代理
cd /usr/local/nginx/conf/vhost
vim proxy.conf //加入如下内容
server
{
listen 80;
server_name ask.apelearn.com;
location /
{
proxy_pass http://47.104.7.242/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
重新加载配置文件,正常访问网站
指定本机去访问正常