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就会在每天凌晨执行。