Nginx默认虚拟主机
Nginx和httpd都有虚拟主机,在httpd中第一个被加载的就是默认虚拟主机;但是在Nginx中它有一个配置用来标记默认虚拟主机(default_server),如果不做标记,那么第一个也是默认为虚拟主机。
默认虚拟主机设置:
1.需改配置文件/usr/local/nginx/conf/nginx.conf
cd /usr/local/nginx/conf/
vim nginx.conf
删除内容后,加上一行(在httpd{}里加)include vhost/*.conf;
(include 其就是引入文件的命令一样。这里是引入当前目录(/conf/)的 vhost/*.conf这类文件)
在/usr/local/nginx/conf下创建vhost目录
mkdir vhost
cd vhost
vim aaa.com.conf (编辑这个新文件,增加内容)
server
{
listen 80 default_server; // 有这个标记的就是默认虚拟主机
server_name aaa.com;
index index.html index.htm index.php; //定义索引
root /data/wwwroot/default; //指定我们访问网站路径
}
创建 default目录(因为我们/data/wwwroot/已经创建)
(mkdir -p /data/wwwroot/default)
mkdir /data/wwwroot/default
cd /data/wwwroot/default
vim index.html (在default目录定义index.html索引页)
(此时如果配置文件无误,这可以正常的include /usr/local/nginx/conf/vhost/aaa.com.conf 这个虚拟主机))
修改完后检查一下nginx配置文件是否有错
(1)检查配置文件有没有错
/usr/local/nginx/sbin/nginx -t
(2)重新加载一下配置文件 (-s reload)
/usr/local/nginx/sbin/nginx -s reload
(这两条命令类似apache中的 -t 和 grantful)
Nginx用户认证
用户认证这部分内容写在虚拟主机里:
步骤:
1.新增一个test.com.com虚拟主机:
cd /usr/local/nginx/conf/
vim test.com.conf (添加内容)
server
{
listen 80;
server_name test.com;
index index.html index.htm index.php;
root /data/wwwroot/test.com;
location /
{
auth_basic "Auth";
auth_basic_user_file /usr/local/nginx/conf/htpasswd; //密码文件路径
}
}
生成密码文件与(使用htpasswd工具)
yum install -y httpd
htpasswd -c /usr/local/nginx/conf/htpasswd cansheng
测试:
创建test.com这个虚拟主机的访问路径文件:
curl -ucansheng:123456 -x127.0.0.1:80 test.com
(这里是对整个主机都用户认证的)
针对一个目录做用户认证
只需要在虚拟主机配置文件中 location 那行 把要用户认证的目录添加上就行
每次修改完后检查一下nginx配置文件是否有错
(1)检查配置文件有没有错
/usr/local/nginx/sbin/nginx -t
(2)重新加载一下配置文件 (-s reload)
/usr/local/nginx/sbin/nginx -s reload
测试:
创建目录:mkdir /data/wwwroot/test.com/admin
写入内容:echo "test test.com/admin dir" > /data/wwwroot/test.com/admin/index.html
针对一个访问的url做用户认证:
修改配置文件:vim /usr/local/nginx/conf/vhost/test.com.conf
测试:不加用户名密码也是报401:
Nginx域名重定向
1.编辑配置文件:
vim /usr/local/nginx/conf/vhost/test.com.conf
每次修改完后检查一下nginx配置文件是否有错
(1)检查配置文件有没有错
/usr/local/nginx/sbin/nginx -t
(2)重新加载一下配置文件 (-s reload)
/usr/local/nginx/sbin/nginx -s reload
测试:
(如果我的虚拟主机中没有定义到该域名,则会跳转到默认虚拟主机)
Nginx访问日志
1.打开住配置文件:vim /usr/local/nginx/conf/nginx.conf
搜索 log_format
2.编辑虚拟主机test.com配置文件:
vim /usr/local/nginx/conf/nginx.conf/test.com.conf
每次修改完后检查一下nginx配置文件是否有错
(1)检查配置文件有没有错
/usr/local/nginx/sbin/nginx -t
(2)重新加载一下配置文件 (-s reload)
/usr/local/nginx/sbin/nginx -s reload
测试:
查看一下日志文件内容:
Nginx日志切割
nginx 日志简单,不像httpd还有自带切割工具。切割Nginx日志需借助系统的切割工具或者自定义脚本。
自定义脚本做切割:
1.创建一个脚本文件:
vim /usr/local/sbin/nginx_logrotate.sh
添加内容
#! /bin/bash
## 假设nginx的日志存放路径为/data/logs/
d=`date -d "-1 day" +%Y%m%d` //表示昨天的日期,做切割一般都是对昨天的日志操作
logdir="/tmp/" //日志存放目录为/tmp/(因为之前定义在/tmp/)
nginx_pid="/usr/local/nginx/logs/nginx.pid" //有pid才能执行最后kill那个命令
cd $logdir
for log in `ls *.log`
do
mv $log $log-$d
done
/bin/kill -HUP `cat $nginx_pid` //相当于前面的命令执行完,日志改完名字后生成源来的日志文件名/tmp/test.com.log
执行以下脚本
sh -x /usr/local/sbin/nginx_logrotate.sh (-x 可以看到执行过程)
查看日志目录生产的文件:
ls /tmp/
(当我们的日志文件够多时要即使处理,删除,减少对磁盘的占用
命令:find /tmp/ -name *.log-* -type f -mtime +30 |xargs rm
(查找到*.log-*的这些文件,把30天前的删除, xargs rm)
)
写完脚本后:如果想在我们设定的时间里定时执行,需要写个任务计划:
命令:crontab -e
这样我们编写的脚本 /usr/local/sbin/nginx_logrotate.sh就会在每天凌晨执行。