2018.9.18日,预习笔记,LNMP架构(二)

笔记目录

  1. Nginx默认虚拟主机
  2. Nginx用户认证
  3. Nginx域名重定向
  4. Nginx访问日志
  5. Nginx日志切割
  6. 静态文件不记录日志和过期时间
  7. Nginx防盗链
  8. Nginx访问控制
  9. Nginx解析PHP相关配置
  10. Nginx代理
  11. 扩展:

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 

https://coding.net/u/aminglinux/p/nginx/git/blob/master/location/priority.md

 

一.Nginx默认虚拟主机

ca4bdee057c9f64b05af799f7494ea4db7d.jpg

示例一:

  • vim /usr/local/nginx/conf/nginx.conf //增加
  •  include vhost/*.conf  这是要添加的内容

9bb062f45951fc812d7e873e1e2488c934e.jpg

  • mkdir /usr/local/nginx/conf/vhost  创建目录
  • cd !$ 进入目录下
  • vim default.conf //编辑文件,加入如下内容

server

{    

listen 80 default_server;  // 定义它的监听端口,有这个标记的就是默认虚拟主机    

server_name aaa.com;    域名

index index.html index.htm index.php;    指定索引页

root /data/wwwroot/default; 指定网址位置

}  

  • mkdir -p /data/wwwroot/default/  创建目录
  • cd !$ 进入目录下
  • echo “This is a default  site.”>/data/wwwroot/default/index.html 创建一个index.html文件并写入一些内容
  •  /usr/local/nginx/sbin/nginx -t 检查一下
  •  /usr/local/nginx/sbin/nginx -s reload  重新加载一下配置文件
  • curl localhost  测试访问一下

c39a39795c95e86070f967a26485910820b.jpg

  • curl -x127.0.0.1:80 123.com 指定一个域名,测试访问一下

0c35b95e145e4e17e96a28d1db6c6af6137.jpg

  • 不管访问什么域名,只要解析指向到这个服务器,都会访问到该站点,这就是默认虚拟主机

 

二.Nginx用户认证

56d2b80d1c053fbca96cc0b053a8fd19ad8.jpg

52052d5233d70f76b56edb178531c423160.jpg

示例一:用户认证

  • 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; 用户名密码文件

}

}  

  • yum install -y httpd  yum安装httpd,使用htpasswd工具
  • htpasswd -c /usr/local/nginx/conf/htpasswd aming 生成用户密码,-c是生成的意思,如果生成第二个则不需要用-c,不然会重置
  • /usr/local/nginx/sbin/nginx -t 检查语法是否有错误
  • /usr/local/nginx/sbin/nginx -s reload //测试配置并重新加载配置文件
  • mkdir /data/wwwroot/test.com 创建目录
  •  echo “test.com”>/data/wwwroot/test.com/index.html 建立一个html文件
  •  curl -x127.0.0.1:80 test.com -I//状态码为401说明需要验证  6a8f60020414344b0b446760fa1d73fe3a6.jpg
  • curl -uaming:passwd -x127.0.0.1:80 test.com 访问状态码变为200  

f9326b31b044ccfb2ae5884a075c8538f47.jpg

  • 编辑windows的hosts文件,然后在浏览器中访问test.com会有输入用户、密码的弹窗  

示例二:针对目录的用户认证

  • vi test.com.conf 编辑文件,做如下更改

location  /admin/    

{        

auth_basic              "Auth";        

auth_basic_user_file   /usr/local/nginx/conf/htpasswd;

}

  • 用curl 测试

a0dc3a2be4f69cd525bfd31d5bf7b0229d0.jpg

  • 新建一个测试html文件,并测试一下

1c1ebfd717369abb3628db3c7fe279953b3.jpg

示例三:针对php做限制,如下更改

  • vi test.com.conf 编辑文件

8f7e2ddfcd28eb068a4558f8ae434a3aee7.jpg

 

 

三.Nginx域名重定向

195eadc691518373b618ee4202ae8d401ee.jpg

示例一:

  • 更改test.com.conf 编辑文件:

server ,如下

{    

listen 80;    

server_name test.com test1.com test2.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状态码

   }

}  

  • server_name后面支持写多个域名,这里要和httpd的做一个对比  permanent为永久重定向,状态码为301,如果写redirect则为302
  • 检查语法并重新加载配置文件

de335c858e182dc78f07c202b6a51eaaaed.jpg

  • curl 测试一下,任意域名都会重定向到指定域名下

3fdb1803ac4d8c6a870fff10a05d2dd0d7e.jpg

 

四.Nginx访问日志

646bbb52c6f2c6295e24461cf05c87bb38d.jpg

示例一:

  • 日志格式  
  • vim /usr/local/nginx/conf/nginx.conf //搜索log_format

$remote_addr

客户端IP(公网IP)

$http_x_forwarded_for

代理服务器的IP

$time_local

服务器本地时间

$host

访问主机名(域名)

$request_uri

访问的url地址

$status

状态码

$http_referer

referer

$http_user_agent

user_agent

 

  • 除了在主配置文件nginx.conf里定义日志格式外,还需要在虚拟主机配置文件中增加
  • vim test.com.conf
  • access_log /tmp/1.log combined_realip;

b3718fd937578e257cb6ae36443888c3fc8.jpg

  •  这里的combined_realip就是在nginx.conf中定义的日志格式名字  
  • -t && -s reload 检查语法并重新加载配置文件
  • curl -x127.0.0.1:80 test.com -I  测试

c0a3e283fb53acecc73617673a3075a4bb0.jpg

  • cat /tmp/1.log 查看日志文件

4f6d3fd1b34d3b2c196d296d7c988fc0860.jpg

 

五.Nginx日志切割

85b9aba90adce5591a550f69ecf31d3efd7.jpg

示例一:因为Nginx不自带日志切割工具,所以自定义脚本借用

  • 自定义shell 脚本  
  • vim /usr/local/sbin/nginx_log_rotate.sh//写入如下内容

#! /bin/bash

## 假设nginx的日志存放路径为/data/logs/

d=`date -d "-1 day" +%Y%m%d`   生成昨天的日期

logdir="/data/logs"   定义存放位置

nginx_pid="/usr/local/nginx/logs/nginx.pid" 定义位置,找他的pid

cd $logdir 进入目录下

for log in `ls *.log`  做个for循环

do    

   mv $log $log-$d   做一个改名操作

done

/bin/kill -HUP `cat $nginx_pid`  重新加载一下,生成新的日志文件

  • 执行一下这个脚本来看看效果,执行过程

43e12558ba94b7053c91ac1ded6c3283da4.jpg

  • ls /tmp/ 看一下

05276b1cf129f65f7633787993475f18571.jpg

  • 在做一个任务计划  ,每天0.0分执行该脚本
  • crontab -e 编辑如下

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

 

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

5c3efa0c63b8a6518dc674d44ab1824cd72.jpg

示例一:

  • vi test.com.conf
  • 配置如下

location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$    

{          

expires      7d;          定义过期时间

access_log off;    关闭日志记录

}

location ~ .*\.(js|css)$    

{          

expires      12h;          

access_log off;    

}

  • -t &&reload 检测语法,并重新加载一下配置文件

2733e5a86104225e9d9f9cc8890468d4771.jpg

  • 测试,先创建两个以图片结尾的文件

cd /data/wwwroot/test.com

vim 1.gif

vim 2.js

  • curl测试一下

85043b4a620ae03e82c0571f390391c199b.jpg

  • 查看日志是否记录

2ad4aee98c1f7f27c018431509fe4634a31.jpg

  • 测试过期时间

7344f6d00054ae7591596033b21b14098a0.jpg

 

七.Nginx防盗链

860c4141f4662ecfe58095e4f7af5099b22.jpg

示例一:

  • 配置如下,可以和上面的配置结合起来
  • vi /usr/local/nginx/conf/vhost/test.com.conf

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) {         如果不是白名单,返回403

return 403;    

   }    

access_log off;

}

  • 配置完成如图

78afc4ba865e27ea3beb5fac90da9f35c51.jpg

  • -t && reload 检测语法并重新加载配置文件

1063e62439a3e2c40297029bd9d086d4c7d.jpg

  • 用curl 测试一下,-e 指定

58afb2695aa9eda598ee76d8aa9f7003692.jpg

 

八.Nginx访问控制

a0774006b5ab817e8d0934c1e8e080ea1ef.jpg

0e60d02591cc1e1ba5c706ff9e60f640abe.jpg

示例一:

  • 需求:访问/admin/目录的请求,只允许某几个IP访问,配置如下:
  • vi /usr/local/nginx/conf/vhost/test.com.conf

location /admin/

{    

allow 192.168.133.1;    

allow 127.0.0.1;    

deny all;

}  

  • mkdir /data/wwwroot/test.com/admin/  
  • echo “test,test”>/data/wwwroot/test.com/admin/1.html  
  • -t && -s reload  检查语法并重新加载配置文件
  • 测试:
  • curl -x127.0.0.1:80 test.com/admin/1.html -I  

1b818e24cfe25afb5bc825e2f28fcc2805a.jpg

  • curl -x192.168.133.130:80 test.com/admin/1.html -I

8dae83b010af83b013f1b3d3dbacbc3f24e.jpg

  • curl -x 192.168.142.128:80 test.com/admin/

6e7f519aeca24f0d0c272f468afd1f9ab58.jpg

 

示例二:禁止解析php

  • 可以匹配正则
  • vi /usr/local/nginx/conf/vhost/test.com.conf

location ~ .*(abc|image)/.*\.php$

{        

deny all;

}

  • -t && reload 检测语法,并重新加载配置文件

0ee5dd638b10f026794467555673859f4b8.jpg

  • 用curl测试一下

e02cc1a0854396f3da7e81a414b1a6eb19f.jpg

 

示例三:根据user-agent限制

  • vi /usr/local/nginx/conf/vhost/test.com.conf

if ($http_user_agent ~ 'Spider/3.0|YoudaoBot|Tomato')

{      

return 403;

}  

  • deny all和return 403效果一样
  • -t && reload 检测语法,并重新加载配置文件

0ee5dd638b10f026794467555673859f4b8.jpg

  • 用curl 检测一下

206f26e3968c92e7afda8f4fdef6e34107c.jpg

  • 如果想忽略大小写,就如下在~ 后添加一个*号就行了

4c4afa1c613f891af7d0b31732b1a586873.jpg

 

 

九.Nginx解析PHP相关配置

3b521c603428bb98b40bec771ad23426390.jpg

示例一:

  • vi /usr/local/nginx/conf/vhost/test.com.conf
  • 配置如下:

location ~ \.php$    

{        

include fastcgi_params;        

fastcgi_pass unix:/tmp/php-fcgi.sock;        

fastcgi_index index.php;        

fastcgi_param SCRIPT_FILENAME

/data/wwwroot/test.com$fastcgi_script_name;    

}

  •  fastcgi_pass 用来指定php-fpm监听的地址或者socket
  •  

示例二:502解决方法

  •  

 

 

 

十.Nginx代理

da2ea746484030647781c608e1ba7bab171.jpg

示例一:

  • cd /usr/local/nginx/conf/vhost  进入目录下
  • vim proxy.conf //加入如下内容

server

{    

listen 80;    

server_name ask.apelearn.com;     定义一个域名

location /    

{        

proxy_pass      http://121.201.9.155/;         配置真实IP

proxy_set_header Host   $host;       要访问的域名 

proxy_set_header X-Real-IP      $remote_addr;   指定ip的 

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;    

   }

}

  • /use/local/nginx/sbin/nginx -t  检测语法错误
  • /use/local/nginx/sbin/nginx -s reload 重新加载一下配置文件
  • curl 测试一下,访问成功,通过本地地址访问到远程的网址

a05edc1ec328ec3047c49a3e1cb432a554a.jpg

 

十一.扩展

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 

转载于:https://my.oschina.net/u/3912766/blog/2056298

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值