2018-07-04 第二十一次课 课后笔记

预习内容

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,把下面这一部分东西给删除掉:

d0f77caf9c393b943b27999f541ed3ee8b5.jpg

97dcc73d2f34c345e81662c382f58b4b047.jpg

2.在httpd里面加入这下面这一行内容

5b0abfa2abcd18fde3bf5d7ce7e993829c0.jpg

3.然后我们在conf目录下创建一个vhost目录,vhost目录下创建一个aaa.com.conf,添加下面的内容

dbf7157f3e52d02101d86d72775999d983b.jpg

3881773b60737e9f53e110de0e12dd1578e.jpg

4.然后创建default目录

7591b9affbeb0abf48719b55c4d92bc6f29.jpg

5.进入到default目录下面去,创建一个index.html的索引页:

312ab60279f121dcde8fee49592dfb00531.jpg

6。然后测试语法是否有错误:显示一个ok一个successful 表示没有错误:

1bf840a395df1197ed68e0087bdb1bb8836.jpg

7.然后重新加载一下:

f694c6c5adacc09b7e9d6acfe5d506f65cb.jpg

8.然后使用curl 访问一下:

d3f5ec1a38ed42baa79c712db68d257276d.jpg

不管我们访问到上面域名,都会指向默认的虚拟主机。

在nginx.conf里面,支持include的写法:

82b031e0276451e06a4b1db8233c9509504.jpg

 12.8 Nginx用户认证

1.首先再来创建一个新的虚拟主机test.com.conf,加入如下内容:

ad8b7965b7e9fcc50173f2dd36619b92d3d.jpg

2.测试语法错误:

f122c10b41cc277c5c232bee427db2a5c7c.jpg

核心配置语句就两行,auth_basic打开认证,auth_basic_user_file 指定用户的密码文件,当然前提是这个用户密码文件得存在,而生成用户密码文件的工具需要借助httpd的htpasswd:

3.创建用户密码文件:

63ee63e13ba3d1b4905e554fdf9a1e8b568.jpg

但是如果想再次创建一个用户,就不需要加上-c选项,加上-c选项就会把之前的密码文件重置。

4.然后再次测试语法错误,和重新j加载:

a00517bc6d523cc9c8421964425d88cc68b.jpg

5,然后利用curl测试,提示401表示需要用户认证:

0df9c8d3928d6b6d39b55037b0e973d168e.jpg

6.加上用户名,用户密码,提示404,因为我们访问test.com它是访问的index.html,我们查看一下test.com都没存在,创建一下:

02de8789eebf920ecaddb2dd16a81d9c346.jpg

7.接着创建一个index.html,然后写入test.com

f28b43fa8dc43e40350da3f522960aba940.jpg

8.然后再来访问一下:成功

33c8fdb1719efaec5e3584195adacecf882.jpg

9.这里有一个需要就是需要访问目录的时候才需要认证,只需要在location后面加上目录的名字即可:

93b6bf08a07a59d1e5b0de5d819df465ad2.jpg

10.编辑完之后,测试语法错误,然后重新加载:

873914e5b3eb2801df368f4ae191f4e7e67.jpg

11.当我们访问test.com的时候,就不会401,访问admin的时候就会报401:

f9c5ddaea675c01a2b3fa8dd9a73114e759.jpg

以上这些是针对目录的,我们也可以针对url 比如admin.php,做法如下:

12.我们直接访问admin的时候是能访问的,

b4dff8add36e0a42b5a0c4139bde4dee14b.jpg

13.当我们访问admin.php的时候是提示401的

1420ca5632a1712bed9e46a80af8414af23.jpg

 12.9 Nginx域名重定向

nginx的域名重定向和httpd类似,只不过nginx的servername 是可以支持写多个的。

1.首先进入到test.conf的虚拟主机配置文件中,加入下面的内容:

5a0a865e66f99acd64d9ec968a1250618db.jpg

2.然后检测语法错误,重新加载:

008596885ec4143cd9a3ff684f777e53402.jpg

3.然后curl测试一下,出现301,location重定向到test.com

8f1abad1f8142ee1ca95b26086e2e8bbbd0.jpg

12.10 Nginx访问日志

ce45a8169bf700317da7ce4c4c3ae59dd8b.jpg

50ba4fd0ff301bcac371541fb32c3b62a67.jpg

1.配置完事,去到虚拟主机配置文件中去指定访问的日志的路径:

7c30f21a76fbc8322f78e20b07129f3ca08.jpg

2.然后检查语法错误,重新加载:

b3fe7caa5474452189ae95d1b6530edcb56.jpg

3.然后在curl访问一下:

0402ac4c94c46b09de3386bde7d42e71946.jpg

4,然后看一下访问日志:

c94a6c0e7f731da4a62577dcaecd5bc070a.jpg

 12.11 Nginx日志切割

nginx的日志很简单,不像httpd还有自带的切割工具,要想切割nginx日志需要借助系统的切割工具或者自定义脚本。

1.下面写一个日志切割的脚本:

b8ddb766ee63d1f6616712905fc049d84ac.jpg

2.然后使用sh 执行这个脚本:

929556408fe6957a1664b2e28c850870371.jpg

加上-x选项是看到执行的过程。

3.然后看下tmp目录下 多个二个日志的文件:

a4e22dd84843ac2c2e185627d4ac21c843f.jpg

4.之后呢 还需要添加任务计划:

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

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

虚拟主机配置文件改写如下:

63d35859e2169d7c332da6b36833b745b40.jpg

1.然后同样测试语法错误,和重新加载:

b8b4f035145cb09a1be4085c5e5fbfc0f3e.jpg

2.进入到test.com的目录下,在这个目录下,创建一个1.gif文件,2.js

45c27ec9d40ddcfdd983a9836edb9b0c1c7.jpg

f3fb79aed47eb880292dd9b8cb54050ff8f.jpg

3.使用curl 进行访问:

9af85e5afa8eca0e6d80b313c5cb8bb3a94.jpg

4.然后看一下访问日志,看看有没有记录。

6a7c1ea563ff1e8d1be61f89d13abde650a.jpg

通过日志可以看到,没有记录gif js日志。

 12.13 Nginx防盗链

首先把之前的不记录静态文件注释掉:

e6a35c86fcbd8a864f3255bd379e093a813.jpg

2.检测语法错误,重新加载:

dffcf215e5ce65987127a544c221cfe0881.jpg

3.使用curl访问一下:

580a2cb2f8c020d5f4f4b702edc809f628c.jpg

显示的是403,换一下test.com看一下:

5359ca81d8e7f58fa5d13c6c957d6018009.jpg

出现200,表明防盗链设置成功。

 12.14 Nginx访问控制

和httpd一样, Nginx也需要限制某些IP不能访问或者只允许某些IP访问。配置方法和httpd很像,但更加简洁了,而且不像httpd那样全部遍历一遍。比如,我们有个需求“使访问 admin目录的请求只允许192.168.188.1和127.0.0.1访问”,配置文件如下:

112a3f1303f47459ca899653bc4ebbcf986.jpg

8fcf7829ca964796f359cf98cf7485eaea5.jpg

在配置httpd的时候,还有一个 order,来定义先allw还是先deny,在 Nginx里并没有,只要匹配规则就结束了。假如来源IP为192.168.73.129,它会从上到下逐一去匹配,第一个IP(192.168.73.129)不匹配,第二个IP(1270.0.1)不匹配,直到第三行(a11)的时候才匹配到,匹配的这条规则为deny(也就是拒绝访问),所以最终会返回一个403的状态码。

2.

f59535499e68a65f1a0e525c5ed23cff887.jpg

3.做测试:先测试127.0.0.1:80

6f3a2f2dda60a385d2f6420e9407efac8f3.jpg

显示200 能访问

9741ebef7d73c6db6120faeaa39ccc75f0f.jpg

d2f13dfeed251c0aa525b77505e87c910bc.jpg

4.上面ip130也能访问,我们看一下日志,它的来源ip是192.168.73.129,在白名单里面,所以能访问到:

32594a682aca83614f9046f346ac2d155b2.jpg

  • 也可以对正则匹配来限制:

编辑虚拟主机配置文件,改写如下内容:

0a7550da7f126af81db6d4f8d5e00b6a918.jpg

测试语法错误,重新加载:

736c40a9e0529a9aab61a22f594a8c10c8c.jpg

做测试:先要创建一个upload目录。

4a2c3a76c0c1e883e25be7fc4d8f97c8a1a.jpg

da073eb1cf14c7c4f680d7540071da07c52.jpg

访问显示403,被限制了。

  • 可以根据user_agent来做一些限制:

a29bd6dc56ba3a7127e3dc6642c518e0762.jpg

7f050cff84686f6bb9ed1ebbee0475132a9.jpg

做测试:

02400c9240eb80820067e2e04276631f8e3.jpg

状态码403.

也可以不区分大小写,直接在location后面加个*号就可以了 。

93fdb0ec8d6ffd79c59fd7f45b8f1972344.jpg

bf66baef6a999d353f080aacc7e6b5336f0.jpg

也是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,看看能不能解析。

58bb1fb1769b92727dd158dd76cebbf1910.jpg

3f7a544e79383e1a4b298e04aa374e74e40.jpg

不能解析,直接把源代码显示出来了。

我们做了相关配置之后,在来看一下,是能解析的,只不过在linux下显示的是代码形式:

d28d9437921a91f5789a543e4489b30ab4a.jpg

我们把限制写错,然后在curl一下:

7d839a1caa6508580d0d0c1d2b66eb8510e.jpg

显示的是502,然后看一下错误日志:

182c0b2f8484cf67457cd555f262bbce9e1.jpg

bcbeb1551e126be735a9f8cdd879bb51e12.jpg

上面的配置中,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服务,就可以通过代理来实现。

0889d9a1d2d256255f996aa17a8ef9615ce.jpg

首先进入到vhost目录下,然后创建一个proxy.conf。

1efffe0659236e2d6bdadab9069a87be899.jpg

编辑如下内容:

b7240957c7b71964f3072d7df35faedff33.jpg

前两行不用解释,和普通的虚拟主机一样,不同的是后面 proxy相关的语句。 Proxy_ _ pass指定要代理的域名所在的服务器IP,这里的IP就是阿铭的论坛所在服务器IP,你可以pingaskapelearn.com获取到该IP。后面的三行为定义发往后端web服务器的请求头,第二行必须有,否则代理不成功,它表示后端Web服务器的域名和当前配置文件中的servername保持一致(即askapelearn.com),第三行和第四行可以省略,前面在讲述 Nginx日志格式的时候介绍过这两个参数,表示的含义是一样的。配置文件保存后,重新加载 Nginx服务并验证。

32c1ff508d45c6976a668f4296c2c4e7d88.jpg

然后可以通过我自己的虚拟机访问阿铭论坛了。

57784fcb5daf238a31483b3805690fa4393.jpg

就能访问了。

转载于:https://my.oschina.net/u/3851487/blog/1841001

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值