0516--LNMP(中)

任务列表:

12.7 默认虚拟主机
12.8 Nginx用户认证
12.9 Nginx域名重定向
12.10 Nginx访问日志
12.11 Nginx日志切割
12.12 静态文件不记录日志和过期时间
12.13 Nginx防盗链
12.14 Nginx访问控制
12.15 Nginx解析php相关配置
12.16 Nginx代理

扩展
nginx.conf 配置详解
https://coding.net/u/aminglinux/p/nginx/git/tree/master/3z
nginx rewrite四种flag
http://unixman.blog.51cto.com/10163040/1711943
https://coding.net/u/aminglinux/p/nginx/git/blob/master/rewrite/break.md
502问题汇总 http://ask.apelearn.com/question/9109
location优先级 https://coding.net/u/aminglinux/p/nginx/git/blob/master/location/priority.md

预习笔记

Nginx虚拟主机

在Nginx中也有默认虚拟主机,跟httpd类似,但和httpd不相同的地方是,它可以在配置中标记默认虚拟主机,如果没有这个标记,第一个被Nginx加载的虚拟主机就是默认主机。

编辑nginx.conf主配置文件
vim /usr/local/nginx/conf/nginx.conf
在配置中增加 include vhost/*.conf;
在这里插入图片描述

创建vhost目录,并新建aaa.com.conf默认虚拟主机配置内容
mkdir /usr/local/nginx/conf/vhost
aaa.com.conf 配置文件内容如下

server
{
listen 80 default_server; //default_server标记该配置为默认虚拟主机服务
server_name aaa.com;//指定主机名 aaa.com
index index.html index.htm index.php; //指定索引页
root /data/wwwroot/default; //指定虚拟主机网站目录
}

创建网站目录
mkdir -p /data/wwwroot/default
创建index.html文件并写入内容
/usr/local/nginx/sbin/nginx -t 检查配置文件语法是否正确
/usr/local/nginx/sbin/nginx -s reload 重新加载配置文件
在这里插入图片描述
测试
指定任何域名都会指向默认虚拟主机
在这里插入图片描述

Nginx用户认证

创建新的虚拟主机配置并写入以下内容
vim /usr/local/nginx/conf/vhost/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;
}
}

由于nginx没有自带创建密码文件的工具,因此需要借助httpd工具;假如没有,使用yum install -y httpd安装
创建密码文件
htpasswd -c /usr/local/nginx/conf/htpasswd test
第一创建时需要加-c选项,增加新的用户名不需要加-c,如果加了,将会覆盖之前创建的文件。
在这里插入图片描述
/usr/local/nginx/sbin/nginx -t 检查配置文件语法是否正确
/usr/local/nginx/sbin/nginx -s reload 重新加载配置文件
测试
在这里插入图片描述
对目录或者页面进行访问认证,对配置文件进行更改:

server
{
listen 80;
server_name test.com;
index index.html index.htm index.php;
root /data/wwwroot/test.com;

location /admin/        //设定访问/admin/目录需要认证
{
auth_basic "Auth";
auth_basic_user_file /usr/local/nginx/conf/htpasswd;
}
}

/usr/local/nginx/sbin/nginx -t 检查配置文件语法是否正确
/usr/local/nginx/sbin/nginx -s reload 重新加载配置文件
测试
在这里插入图片描述

总结:
location /:针对整个目录做认证
也可以针对某一个目录或url做认证,比如:
location /admin/:针对admin目录做认证
location ~ admin.php:针对url做认证
auth_basic_user_file:定义用户认证文件

Nginx域名重定向

当我们站点有多个域名的时候,权重降低了,但是之前的域名已经被一部分人所依赖了,也不可能去通知大家新的站点,所以我们就会选择一个主域名其它的直接跳到主域名!

将以下内容写入虚拟主机配置文件中
vim /usr/local/nginx/conf/vhost/test.com.conf

server
{
listen 80;
server_name test.com test2.com test3.com;
index index.html index.htm index.php;
root /data/wwwroot/test.com;
if ($host != 'test.com') {
rewrite ^/(.*)$ http://test.com/$1 permanent; 
}
}

permanent:永久跳转,状态码为301
redirect:临时跳转,状态码为302
/usr/local/nginx/sbin/nginx -t 检查配置文件语法是否正确
/usr/local/nginx/sbin/nginx -s reload 重新加载配置文件
测试,使用配置中写入的域名,跳转成功
在这里插入图片描述

Nginx日志

在nginx主配置文件定义日志的,其中combined_realip为日志格式的名称
vim /usr/local/nginx/conf/nginx.conf
配置文件中 combined_realip为日志格式的名称,我们把它改个名字,定义为test
在这里插入图片描述

释义
$remote_addr    客户端ip(公网ip)
$http_x_forwarded_for    代理服务器的ip
$time_local    服务器本地时间
$host    访问主机名(域名)
$request_uri    访问的url地址
$status    状态码
$http_referer    referer
$http_user_agent    user_agent

修改虚拟主机配置文件,定义日志目录和格式、名称;

server
{
listen 80;
server_name test.com test2.com test3.com;
index index.html index.htm index.php;
root /data/wwwroot/test.com;
if ($host != 'test.com') {
rewrite ^/(.*)$ http://test.com/$1 permanent;
}
access_log /tmp/test.com.log test; //定义日志格式 和目录
}

/usr/local/nginx/sbin/nginx -t 检查配置文件语法是否正确
/usr/local/nginx/sbin/nginx -s reload 重新加载配置文件
查看日志文件
在这里插入图片描述

Nginx日志切割

由于Nginx没有自带的日志切割工具,因此我们需要通过脚本来完成需求
编辑脚本 vim /usr/local/sbin/nginx_logrotate.sh
内容如下

#! /bin/bash
d=`date -d "-1 day" +%Y%m%d`    //生成昨天的日期
logdir="/tmp/"      //指明日志存放的位置
nginx_pid="/usr/local/nginx/logs/nginx.pid"    //将nginx的pid值赋予给nginx_pid
cd $logdir    //进入日志所在目录
for log in `ls *.log`  for   //使用for循环,将 .log结尾文件改名
do
mv $log $log-$ddone
/bin/kill -HUP `cat $nginx_pid`    //重启服务,并生成新的日志文件

测试脚本
sh -x /usr/local/sbin/nginx_logrotate.sh
在这里插入图片描述

日志清理
也可以在脚本中加入这样一条,自动清理日志
find /tmp/ -name .log- -type f -mtime +30 |xargs rm

创建定时任务,定时进行日志切割
crontab -e
在这里插入图片描述

静态文件不记录日志和过期时间

虚拟主机配置文件location~可以指定对应的静态文件,expires配置过期时间,而access_log 配置为off就可以不记录访问日志了

server
{
listen 80;
server_name test.com test2.com test3.com;
index index.html index.htm index.php;
root /data/wwwroot/test.com;
if ($host != 'test.com') {
rewrite ^/(.*)$ http://test.com/$1 permanent;
}
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$ //匹配.gif等格式的静态文件不计入日志
   {
   expires 7d; //有效期7天
   access_log off; //不记录日志
   }
location ~ .*\.(js|css)$ //匹配js或者css文件
   {
    expires 12h; //有效期12小时
    access_log off;
    }
access_log /tmp/test.com.log ying;
}

/usr/local/nginx/sbin/nginx -t 检查配置文件语法是否正确
/usr/local/nginx/sbin/nginx -s reload 重新加载配置文件
测试,访问jpg和css都没有被记录,其他格式的记录成功
在这里插入图片描述
缓存保留时间也与配置中一致
在这里插入图片描述

Nginx防盗链

在虚拟主机配置中写入以下代码

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;
}
~* 表示不区分大小写
valid_referers none blocked server_names *.test.com;  //定义白名单
不匹配白名单的,定义返回403

/usr/local/nginx/sbin/nginx -t 检查配置文件语法是否正确
/usr/local/nginx/sbin/nginx -s reload 重新加载配置文件
测试,白名单refer访问成功,其他refer提示403错误在这里插入图片描述

Nginx访问控制

需求:某些目录只允许某些IP可以访问

在虚拟主机配置中写入以下内容

location /admin/ //在admin目录下操作
  {
   #allow 127.0.0.1;
   allow 192.168.190.103;
   deny all;
  }

/usr/local/nginx/sbin/nginx -t 检查配置文件语法是否正确
/usr/local/nginx/sbin/nginx -s reload 重新加载配置文件
测试,被允许的IP可以正常访问
在这里插入图片描述

针对目录下的某类文件

这里主要是为了防止上传php文件,以免造成木马文件,影响安全
在虚拟主机配置文件中写入以下内容

location ~ .*(upload|image)/.*\.php$
{
        deny all;
}

/usr/local/nginx/sbin/nginx -t 检查配置文件语法是否正确
/usr/local/nginx/sbin/nginx -s reload 重新加载配置文件
测试,访问php被拒绝,访问txt允许
在这里插入图片描述

根据user-agent限制

禁止相关的user-agent,访问网站;
if ($http_user_agent ~ ‘Spider/3.0|YoudaoBot|Tomato’)
{
return 403;
}
/usr/local/nginx/sbin/nginx -t 检查配置文件语法是否正确
/usr/local/nginx/sbin/nginx -s reload 重新加载配置文件
测试,curl -A “AAAAA” 指定user-agent
在这里插入图片描述

Nginx解析php的配置

创建一个php文件
vim /data/wwwroot/test.com/index.php
在这里插入图片描述
在虚拟主机配置增加PHP解析的配置

location ~ \.php$
  {
   include fastcgi_params;
   fastcgi_pass unix:/tmp/php-fcgi.sock;
   # fastcgi_pass 127.0.0.1:9000
   fastcgi_index index.php;
   fastcgi_param SCRIPT_FILENAME /data/wwwroot/test.com$fastcgi_script_name;
  } 
    其中fastcgi_pass用来指定php-fpm的地址,如果php-fpm监听的是一个tcp:port的地址(比如127.0.0.1:9000),那么也需要在这里改成fastcgi_pass 127.0.0.1:9000。这个地址一定要和php-fpm服务监听的地址匹配,否是会报502错误.还有一个地方要注意fastcgi_param SCRIPT_FILENAME 后面跟的路径为该站点的根目录,和前面定义的root那个路径保持一致,如果这里配置不对,访问PHP页面会出现404;还有一种502的现象,如果内存中出现大量的php-fpm进程占据了内存,也会同样导致此问题!

/usr/local/nginx/sbin/nginx -t 检查配置文件语法是否正确
/usr/local/nginx/sbin/nginx -s reload 重新加载配置文件
在这里插入图片描述

Nginx代理

Nginx代理是一种反向代理。反向代理(Reverse Proxy)方式是指以代理服务器来接受Internet上的连接请求,然后将请求转发给内部网络上的服务器;并将从服务器上得到的结果返回给Internet上请求连接的客户端,此时代理服务器对外就表现为一个服务器。
假如这家公司有很多台服务器,为了节省成本,不能为所有的服务器都分配公网IP,而如果一个没有公网的IP的复为其要提供web服务,就可以通过代理来实现
在这里插入图片描述
在虚拟主机配置文件中新建一个配置文件
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;
  }
}
因为是代理服务器所以不需要访问本地服务器的任何文件,ask.apelearn.com; 定义一个域名;
proxy_pass http://47.104.7.242/;真实WEB服务器的IP地址。
$host;就是server_name

/usr/local/nginx/sbin/nginx -t 检查配置文件语法是否正确
/usr/local/nginx/sbin/nginx -s reload 重新加载配置文件
测试
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值