nginx三:常用功能(二):日志、虚拟主机、Location

5.日志

nginx有非常灵活的日志记录模式。

ELK,用来采集nginx、java(json格式)....等的日志。

log_format compression '$remote_addr - $remote_user [$time_local] '
                       '"$request" $status $bytes_sent '
                       '"$http_referer" "$http_user_agent" "$gzip_ratio"';
access_log /spool/logs/nginx-access.log compression buffer=32k;

在没有代理上网时,remote_addr和http_x_forwarded_for记录的IP地址是一样的。

在有代理上网时,remote_addr记录的是代理服务器的地址,http_x_forwarded_for同时记录代理服务器的地址和原始上网的地址。

6.虚拟主机(虚拟站点)

所谓虚拟主机,就是在一台服务器上配置多个网站。

如:公司主页、博客、论坛看似三个网站,实际上可以运行在一台服务器上。

实现虚拟主机的方式:

  • 基于IP:不同的IP,表示不同的虚拟主机
  • 基于端口:相同的IP,不同的端口,表示不同的虚拟主机
  • 基于域名:相同的IP,相同的端口,不同的域名

需求:部署公司三个站点,分别是www,bbs,blog

示例1:基于IP的虚拟主机,一般很少使用

a.创建目录:mkdir -p /var/www/{www,bbs,blog}

b.创建对应的配置文件:

vim /etc/nginx/conf.d/www.conf

server {
     listen 192.168.1.20:80;
     server_name www.myweb.com;
     location / {
         root /var/www/www;
         index index.html
    }  

}

 

vim /etc/nginx/conf.d/blog.conf

server {
     listen 192.168.1.21:80;
     server_name blog.myweb.com;
     location / {
         root /var/www/blog;
         index index.html
    }  

}

 

vim /etc/nginx/conf.d/bbs.conf

server {
     listen 192.168.1.22:80;
     server_name bbs.myweb.com;
     location / {
         root /var/www/bbs;
         index index.html
    }  

}

 

示例2:基于端口的虚拟主机

a.同样,创建目录:mkdir -p /var/www/{www,blog,bbs}

b.创建对应的配置文件

vim /etc/nginx/conf.d/www.conf

server {
     listen 80;
     server_name www.myweb.com;
     location / {
         root /var/www/www;
         index index.html
    }  
}

 

vim /etc/nginx/conf.d/blog.conf

server {
     listen 81;
     server_name blog.myweb.com;
     location / {
         root /var/www/blog;
         index index.html
    }  
}

 

vim /etc/nginx/conf.d/bbs.conf

server {
     listen 82;
     server_name bbs.myweb.com;
     location / {
         root /var/www/bbs;
         index index.html
    }  
}

 

c.语法测试,重载nginx:

nginx -t

systemctl reload nginx

d.修改hosts解析

192.168.1.10 www.myweb.com blog.myweb.com bbs.myweb.com

 

e.测试:

http://www.myweb.com
http://blog.myweb.com:81
http://bbs.myweb.com:82

 

示例3:基于域名的虚拟主机

a.同样,创建目录:mkdir -p /var/www/{www,blog,bbs}

b.创建对应的配置文件

vim /etc/nginx/conf.d/www.conf

server {
        listen 80;
        server_name www.myweb123.com;
        location / {
                root /var/www/www;
                index index.html;
        }
}

 

vim /etc/nginx/conf.d/blog.conf

server {
        listen 80;
        server_name blog.myweb123.com;
        location / {
                root /var/www/blog;
                index index.html;
        }
}

 

vim /etc/nginx/conf.d/bbs.conf

server {
        listen 80;
        server_name bbs.myweb123.com;
        location / {
                root /var/www/bbs;
                index index.html;
        }
}

 

c.语法测试,重载nginx:

nginx -t

systemctl reload nginx

d.修改hosts解析

192.168.1.10 www.myweb123.com blog.myweb123.com bbs.myweb123.com

 

e.测试:

http://www.myweb123.com
http://blog.myweb123.com
http://bbs.myweb123.com

 

通常access_log,应该放在server下面,以便区分不同的server对应不同的log

7.Location:用来控制访问路径

1).server中,错误页面处理

        location / {
                root /var/www/blog;
                index index.html;
        }

        error_page 500 502 503 503 /50x.html;  # 将500,502503,504的错误页面,定义/50x.html文件来响应错误页面。/表示根,必须在这之前定义根root
        location = /50x.html {  # 定义错误页面的路径:根目录下的50x.html文件
                root /var/www/blog;
}

 2).在apache和nginx中,使用PHP代理,是不一样的:

在apache中,带有php模块,nginx中没有。

在apache中,可以使用直接使用apache来代理PHP脚本。

在nginx中,需要将php脚本传递给fastCGI server。

3).拒绝访问的文件:

location ~ /\.ht {  # 拒绝访问根目录下,.ht开头的文件
    deny all;
}
location ~ \.avi$ {   #拒绝访问任何目录下的avi文件
allow 192.0.0.0/24; deny all; }

 

 4.location语法:

location [=   ^~   ~  ~*    !~   !~*  /]   /uri/  {.........}

测试优先级:

server {
        listen 80;
        server_name test.myweb123.com;
        location / {
                default_type text/html;
                return 200 "location /";
        }
        location =/ {
                default_type text/html;
                return 200 "location =/";
        }
        location ~ / {
                default_type text/html;
                return 200 "location ~";
        }
#       location ^~ / {
#               default_type text/html;
#               return 200 "location ^~";
#       }
}

 

 vim /etc/hosts

192.168.1.10 www.myweb123.com blog.myweb123.com bbs.myweb123.com  test.myweb123.com

访问1:curl test.myweb123.com

返回:location =/,可以“=”的优先级最高

访问2:注释掉"location = "部分,再curl

返回:location ~ 

5.location应用场景

说明:

\.   表示.   \为转义符

.*  表示任意路径任意字符

 测试:

创建一个avi文件:

 dd if=/dev/zero of=test.avi bs=10M count=1

 

禁止访问avi文件:

        location ~ \.avi$ {
                deny all;
        }

nginx -t

systemctl reload nginx

 

posted on 2014-08-25 15:07  myworldworld  阅读(109)  评论(0)    收藏  举报

导航