预习内容
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代理
12.7 默认虚拟主机
先来解释“虚拟主机”。在介绍httpd的时候,已经解释过默认虚拟主机的概念,在 Nginx中也有默认虚拟主机,跟httpd类似,第一个被 Nginx加载的虚拟主机就是默认主机。但和httpd不相同的地方是,它还有一个配置用来标记默认虚拟主机。也就是说,如果没有这个标记,第一个虚拟主机为默认虚拟主机。
1.首先改一下nginx.conf,把下面这一部分东西给删除掉:
2.在httpd里面加入这下面这一行内容
3.然后我们在conf目录下创建一个vhost目录,vhost目录下创建一个aaa.com.conf,添加下面的内容
4.然后创建default目录
5.进入到default目录下面去,创建一个index.html的索引页:
6。然后测试语法是否有错误:显示一个ok一个successful 表示没有错误:
7.然后重新加载一下:
8.然后使用curl 访问一下:
不管我们访问到上面域名,都会指向默认的虚拟主机。
在nginx.conf里面,支持include的写法:
12.8 Nginx用户认证
1.首先再来创建一个新的虚拟主机test.com.conf,加入如下内容:
2.测试语法错误:
核心配置语句就两行,auth_basic打开认证,auth_basic_user_file 指定用户的密码文件,当然前提是这个用户密码文件得存在,而生成用户密码文件的工具需要借助httpd的htpasswd:
3.创建用户密码文件:
但是如果想再次创建一个用户,就不需要加上-c选项,加上-c选项就会把之前的密码文件重置。
4.然后再次测试语法错误,和重新j加载:
5,然后利用curl测试,提示401表示需要用户认证:
6.加上用户名,用户密码,提示404,因为我们访问test.com它是访问的index.html,我们查看一下test.com都没存在,创建一下:
7.接着创建一个index.html,然后写入test.com
8.然后再来访问一下:成功
9.这里有一个需要就是需要访问目录的时候才需要认证,只需要在location后面加上目录的名字即可:
10.编辑完之后,测试语法错误,然后重新加载:
11.当我们访问test.com的时候,就不会401,访问admin的时候就会报401:
以上这些是针对目录的,我们也可以针对url 比如admin.php,做法如下:
12.我们直接访问admin的时候是能访问的,
13.当我们访问admin.php的时候是提示401的
12.9 Nginx域名重定向
nginx的域名重定向和httpd类似,只不过nginx的servername 是可以支持写多个的。
1.首先进入到test.conf的虚拟主机配置文件中,加入下面的内容:
2.然后检测语法错误,重新加载:
3.然后curl测试一下,出现301,location重定向到test.com
12.10 Nginx访问日志
1.配置完事,去到虚拟主机配置文件中去指定访问的日志的路径:
2.然后检查语法错误,重新加载:
3.然后在curl访问一下:
4,然后看一下访问日志:
12.11 Nginx日志切割
nginx的日志很简单,不像httpd还有自带的切割工具,要想切割nginx日志需要借助系统的切割工具或者自定义脚本。
1.下面写一个日志切割的脚本:
2.然后使用sh 执行这个脚本:
加上-x选项是看到执行的过程。
3.然后看下tmp目录下 多个二个日志的文件:
4.之后呢 还需要添加任务计划:
• 0 0 * * * /bin/bash /usr/local/sbin/nginx_log_rotate.sh
12.12 静态文件不记录日志和过期时间
虚拟主机配置文件改写如下:
1.然后同样测试语法错误,和重新加载:
2.进入到test.com的目录下,在这个目录下,创建一个1.gif文件,2.js
3.使用curl 进行访问:
4.然后看一下访问日志,看看有没有记录。
通过日志可以看到,没有记录gif js日志。
12.13 Nginx防盗链
首先把之前的不记录静态文件注释掉:
2.检测语法错误,重新加载:
3.使用curl访问一下:
显示的是403,换一下test.com看一下:
出现200,表明防盗链设置成功。
12.14 Nginx访问控制
和httpd一样, Nginx也需要限制某些IP不能访问或者只允许某些IP访问。配置方法和httpd很像,但更加简洁了,而且不像httpd那样全部遍历一遍。比如,我们有个需求“使访问 admin目录的请求只允许192.168.188.1和127.0.0.1访问”,配置文件如下:
在配置httpd的时候,还有一个 order,来定义先allw还是先deny,在 Nginx里并没有,只要匹配规则就结束了。假如来源IP为192.168.73.129,它会从上到下逐一去匹配,第一个IP(192.168.73.129)不匹配,第二个IP(1270.0.1)不匹配,直到第三行(a11)的时候才匹配到,匹配的这条规则为deny(也就是拒绝访问),所以最终会返回一个403的状态码。
2.
3.做测试:先测试127.0.0.1:80
显示200 能访问
4.上面ip130也能访问,我们看一下日志,它的来源ip是192.168.73.129,在白名单里面,所以能访问到:
- 也可以对正则匹配来限制:
编辑虚拟主机配置文件,改写如下内容:
测试语法错误,重新加载:
做测试:先要创建一个upload目录。
访问显示403,被限制了。
- 可以根据user_agent来做一些限制:
做测试:
状态码403.
也可以不区分大小写,直接在location后面加个*号就可以了 。
也是403
12.15 Nginx解析php相关配置
前面介绍了很多nginx的配置,一直都还没有提到和PHP相关的东西。在LAMP中,PHP是作为httpd的一个模块出现的,只要PHP模块被加载,那么就能解析PHP脚本了。而在LNMP中,PHP是以一个服务(php-fpm)的形式存在的,首先要启动php-fpm服务,然后 Nginx再和php-fpm通信。也就是说,处理PHP脚本解析的工作是由php-fpm来完成的, Nginx仅仅是一个“搬运工”,它把用户的请求传递给php-fpm,php-fpm处理完成后把结果传递给 Nginx, Nginx再把结果返回给用户:
在做限制之前我们先创建一个3.php,看看能不能解析。
不能解析,直接把源代码显示出来了。
我们做了相关配置之后,在来看一下,是能解析的,只不过在linux下显示的是代码形式:
我们把限制写错,然后在curl一下:
显示的是502,然后看一下错误日志:
上面的配置中,fastcgi_pass用来指定php-fpm的地址,如果php-fpm监听的是一个tcp:port的地址(127.0.0.1:9000),那么也需要在这里改成fastcgi_pass 127.0.0.1:9000,这个地址一定要和php-fpm服务监听的地址匹配,否则就会出错:
12.16 Nginx代理
Nginx的代理功能非常实用,这也是 nginx比httpd越来越受欢迎的一个原因。一家公司有很多台服务器,为了节省成本,不能为所有服务器都分配公网IP,而如果一个没有公网IP的服务器要提供Web服务,就可以通过代理来实现。
首先进入到vhost目录下,然后创建一个proxy.conf。
编辑如下内容:
前两行不用解释,和普通的虚拟主机一样,不同的是后面 proxy相关的语句。 Proxy_ _ pass指定要代理的域名所在的服务器IP,这里的IP就是阿铭的论坛所在服务器IP,你可以pingaskapelearn.com获取到该IP。后面的三行为定义发往后端web服务器的请求头,第二行必须有,否则代理不成功,它表示后端Web服务器的域名和当前配置文件中的servername保持一致(即askapelearn.com),第三行和第四行可以省略,前面在讲述 Nginx日志格式的时候介绍过这两个参数,表示的含义是一样的。配置文件保存后,重新加载 Nginx服务并验证。
然后可以通过我自己的虚拟机访问阿铭论坛了。
就能访问了。