默认虚拟主机
删除/usr/local/nginx/conf/nginx.conf文件中http{}配置里的server{} ,然后在http{}配置的最后添加一行:include vhost/*.conf
##注意nginx配置文件中,一条配置必须以分号 ; 结束,否则都视为一条配置;
创建虚拟主机的配置文件存放目录vhost ,和虚拟主机配置文件:
## 一个server{} 就是一个虚拟主机
## 可以在一个配置文件中写多个虚拟主机
## 也可以给每一个虚拟主机创建单独的配置文件
## nginx的server_name与apache不同,nginx可以直接定义多个server_name
## 当server_name后面带有default_server字段时,就代表这个虚拟主机就是默认虚拟主机## 否则跟apache相同,第一个虚拟主机为默认虚拟主机
检查配置文件是否有语法错误,平滑重启nginx服务:
##检查语法错误:/usr/local/nginx/sbin/nginx -t
##平滑重启nginx服务,代表在不停止nginx服务的情况下,重新加载配置文件,重启工作线程:nginx -s reload
测试访问
在/data/wwwroot/目录下创建虚拟主机的根目录一个测试页文件
使用curl测试访问www.test.com
[root@server-lnmp ~]# curl -x127.0.0.1:80 www.test.com<h1>This is test page</h1>
使用curl测试访问www.default.com
[root@server-lnmp ~]# curl -x10.1.1.28:80 www.default.com<h1>This is defalut site</h1>
使用curl测试访问其他没有定义过server_name的域名
[root@server-lnmp ~]# curl -x10.1.1.28:80 www.aaa.com
<h1>This is defalut site</h1>
[root@server-lnmp ~]# curl -x10.1.1.28:80 bbb.cn
<h1>This is defalut site</h1>
Nginx用户认证
在server_name 是www.test.com的虚拟主机配置下面添加以下的配置
生成用于验证的用户和密码,这里也需要用到apache的htpasswd命令,如果没有这个命令可以yum安装httpd-tools可以了
#注:htpasswd命令的-c选项,只有在第一次创建用户认证的密码文件时需要使用,
#如果再次添加用户和密码时使用了-c选项,则会覆盖掉之前的所有内容
##检查语法错误:/usr/local/nginx/sbin/nginx -t
##平滑重启nginx服务,代表在不停止nginx服务的情况下,重新加载配置文件,重启工作线程:/usr/local/nginx/sbin/nginx -s reload
测试效果
curl 测试访问www.test.com
针对目录的用户认证
修改test.com.conf配置文件
#注意location匹配的目录不再是根目录,而是/admin/目录#这里的根目录指的是网站的根目录:/data/wwwroot/www.test.com/
##检查语法错误:/usr/local/nginx/sbin/nginx -t
##平滑重启nginx服务,代表在不停止nginx服务的情况下,重新加载配置文件,重启工作线程:/usr/local/nginx/sbin/nginx -s reload
测试效果
curl测试访问www.test.com/admin针对文件的用户认证
##检查语法错误:/usr/local/nginx/sbin/nginx -t
##平滑重启nginx服务,代表在不停止nginx服务的情况下,重新加载配置文件,重启工作线程:/usr/local/nginx/sbin/nginx -s reload
测试效果
创建测试文件
[[email protected] ~]# echo '/data/wwwroot/www.test.com/admin.html' >/data/wwwroot/www.test.com/admin.html
[[email protected] ~]# echo '/data/wwwroot/www.test.com/admin/admin.html' >/data/wwwroot/www.test.com/admin/admin.html
curl测试访问www.test.com/admin.html
Nginx域名重定向
修改test.com.conf配置文件配置解释
关于URI
测试效果
curl测试访问test.com和abc.com
Nginx访问日志
配置方式
除了在主配置文件nginx.conf里定义日志格式外,还需要在虚拟主机配置文件中增加配置行
配置文件的内容最后一行内容就是定义虚拟主机的访问日志
测试效果
使用curl访问一次www.test.com,然后查看日志文件的内容。
Nginx日志切割
nginx和apache不同,nginx没有自带的日志切割工具 所以需要自己编写一个日志切割脚本, 然后配合计划任务来实现日志切割的功能。
自定义日志切割脚本
脚本内容如下,一般脚本都放在/usr/local/sbin/目录下
任务计划
编写完日志切割脚本后,使用crontab -e添加一条任务计划,每天0点0分执行这个日志切割脚本
静态文件:不记录日志,过期时间
配置方式
编辑虚拟主机配置文件, 在虚拟主机www.test.com的配置中添加以下内容
配置说明:
Nginx防盗链
配置方式
防盗链可以和静态文件结合起来配置。 需要修改前面添加的静态文件的配置、修改后test.com.conf文件的内容如下:
防盗链配置解释
测试效果
curl直接请求访问www.test.com/test.jpg ,这时referer为none 所有可以访问
curl 指定referer为http://baidu.com 进行访问请求 这时referer为http://baidu.com 没在白名单里面, 所以状态码返回403,拒绝访问了
Nginx访问控制
配置方式
需求:访问/aaa/目录的请求,只允许某几个IP访问,在虚拟主机www.test.com的配置里添加如下内容:
配置说明:
测试效果
创建测试目录和文件
curl 将域名www.test.com/aaa/解析到127.0.0.1:80这时系统本地就会使用127.0.0.1这个ip向nginx服务发起访问请求,所以remote_addr就是127.0.0.1,可以正常访问
curl 将域名www.test.com/aaa/解析到10.1.1.28:80这时系统本地就会使用10.1.1.28这个ip向nginx服务发起访问请求,所以remote_addr就是10.1.1.28,会拒绝访问
匹配正则
根据user_agent限制
Nginx解析php相关配置
配置方式
在虚拟主机www.test.com 的配置最后面的access_log前一行添加下面的内容
配置解释:
配置php-fpm监听 ip:port
修改/usr/local/php-fpm/etc/php-fpm.conf配置文件:
将listen = /tmp/php-fcgi.sock 修改为 listen = 10.1.1.28:9000 ,这里的ip需要根据自己的环境来填写
再修改test.com.conf中虚拟主机www.test.com的配置
将fastcgi_pass unix:/tmp/php-fcgi.sock; 修改为fastcgi_pass 10.1.1.2:9000;
重载php-fpm和nginx配置
测试访问www.test.com/test.php
Nginx代理
配置代理服务器之前的测试
配置代理服务器
这里我们先用ping命令查看一下baidu.com的ip地址在/usr/local/nginx/conf/vhost/目录下添加一个配置文件 proxy.conf并写入代理服务器的配置
测试效果
再次测试访问 curl -x127.0.0.1:80 www.baidu.com将www.baidu.com解析到本机,结果可以访问到正则的百度首页了