CentOS7 Nginx配置--虚拟主机、用户认证、域名重定向、访问日志

默认虚拟主机
修改主配置文件nginx.conf 在结束符号} 上面加入一行配置。
include vhost/*.conf;
意思是在/usr/local/nginx/conf/vhost/下的所有以.conf 结尾的文件都会加载,这样就可以把所有虚拟主机配置文件都放到vhost目录下。
 
mkdir /usr/local/nginx/conf/vhost
cd /usr/local/nginx/conf/vhost
vim default.conf
server
{
       listen 80 default_server;   //有这个标记的就是默认虚拟主机
       server_name aaa.com;
       index index.html index.htm index.php;
       root /data/nginx/default;
}
/usr/local/nginx/sbin/nginx-t        
/usr/local/nginx/sbin/nginx-s reload
echo"default_server" > /data/nginx/default/index.html 创建索引页
curl-x127.0.0.1:80 aaa.com 访问aaa.com
curl-x127.0.0.1:80 1212.com
default_server 访问没有定义过的域名也会访问到aaa.com
 
用户认证
 
创建一个新的虚拟主机
vim test.com.conf
server
{
       listen 80;
       server_name test.com;
       index index.html index.htm index.php;
       root /data/nginx/test.com;
       location /
       {
       auth_basic      "Auth";
       auth_basic_user_file   /usr/local/nginx/conf/htpasswd;
       }
}
核心配置语句就两行,auth_basic打开认证,auth_basic_user_file指定用户密码文件,前提是这个用户密码文件存在。而生成用户密码文件的工具需要借助httpd的htpasswd,nginx不自带这个工具。
yum install -y httpd
 
htpasswd -c /usr/local/nginx/conf/htpasswdqiu 创建用户 qiu
New password:
Re-type new password:
Adding password for user qiu
 
/usr/local/nginx/sbin/nginx -t 检查配置文件是否正确
/usr/local/nginx/sbin/nginx -s reload 重新加载配置文件
 
用curl命令来验证
mkdir /data/nginx/test.com
echo "test.com" >/data/nginx/test.com/index.html
curl -I -x127.0.0.1:80 test.com 显示如下
HTTP/1.1 401 Unauthorized
Server: nginx/1.12.2
Date: Sun, 14 Jan 2018 07:10:45 GMT
Content-Type: text/html
Content-Length: 195
Connection: keep-alive
WWW-Authenticate: Basicrealm="Auth"
状态码 401 说明该网站需要验证。
 
打开windows的hosts文件加入192.168.153.135      test.com(IP地址因人而异)
然后浏览器中访问test.com 出现验证对话框,输入之前创建的用户名和密码就可以访问了。
 
如果是针对某个目录做用户认证,需要修改location后面的路径:
location  /admin/
       {
       auth_basic      "Auth";
       auth_basic_user_file   /usr/local/nginx/conf/htpasswd;
       }
 
域名重定向
vim test.com.conf
{
       listen 80;
       server_name test.com test1.com test2.com;
       index index.html index.htm index.php;
       root /data/nginx/test.com;
       
       if ($host != 'test.com'){
                rewrite ^/(.*)$http://test.com/$1 permanent;
       }
}
server_name 后面可以跟多个域名,permanent为永久重定向,相当于httpd的R=301
 
测试:
/usr/local/nginx/sbin/nginx -t
/usr/local/nginx/sbin/nginx -s reload
 
curl -x127.0.0.1:80 test1.com/123.txt -I
HTTP/1.1 301 Moved Permanently
Server: nginx/1.12.2
Date: Sun, 14 Jan 2018 07:27:40 GMT
Content-Type: text/html
Content-Length: 185
Connection: keep-alive
Location: http://test.com/123.txt
 
阿铭老师笔记:
有时候有这样的需求,当两个或多个域名都可以访问同一个站点,但是我们想当访问B域名时,使其自动跳转至A域名。其实nginx很容易实现这样的功能:
(以下资料来源于互联网)
nginx中进行301重定向(301redirect)是非常容易的。比方说要将www.caipanzi.com永久性重定向至caipanzi.com,有两种方法
1.方法A
server {
    server_name caipanzi.comwww.caipanzi.com;
    if ($host != 'caipanzi.com' ) {
       rewrite  ^/(.*)$  http://caipanzi.com/$1  permanent;
        }
    
}
2.方法B(为带www的域名单独设一条server规则)
server {
   server_name  www.caipanzi.com;
    rewrite ^(.*) http://caipanzi.com$1permanent;
}
 
Nginx访问日志
查看nginx日志格式:
grep -A2 log_format/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"';
 
然后到虚拟主机配置文件中指定访问日志的路径:
 
server
{
       listen 80;
       server_name test.com test1.com test2.com;
       index index.html index.htm index.php;
       root /data/nginx/test.com;
 
       if ($host != 'test.com'){
                rewrite ^/(.*)$http://test.com/$1 permanent;
       }
       access_log /tmp/1.log combined_realip;
}
使用access_log来指定日志的存储路径,最后指定日志的格式的名字,测试:
/usr/local/nginx/sbin/nginx -t
/usr/local/nginx/sbin/nginx -s reload
 
curl -x127.0.0.1:80 test.com/111

404 NotFound

404 NotFound



nginx/1.12.2



 
cat /tmp/1.log
 
nginx 日志切割脚本:
vim /usr/local/sbin/nginx_log_rotate.sh
 
#!/bin/bash
d=`date -d "-1 day" +%Y%m%d`
logdir="/data/logs"
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`
 
追加计划任务(crontab -l显示所有计划任务 -e创建计划任务 -r 删除计划任务)

0 0 * * * /bin/bash/usr/local/sbin/nginx_log_rotate.sh

你可能感兴趣的:(linux相关,shell脚本--练习题)