2018-7-4 笔记
12.7 默认虚拟主机
1.修改主机配置文件:添加以下一行
include vhost/*.conf //意思是/usr/local/nginx/conf/vhost/下面所以以.conf结尾的文件都会被加载
2.在conf目录下创建vhost目录并写一个.conf配置文件
mkdir vhost
vim /vhost/default.conf
3.在default.conf配置文件写入以下内容
server
{
listen 80 default_server; //default标记默认虚拟主机
server_name aaa.com; //域名
index index.html index.htm index.php; //支持的解析
root /data/nginx; //访问那个页面
}
4.检查语法
/usr/local/nginx/sbin/nginx -t
5.创建data和nginx目录
mkdir data
mkdir nginx
6.在nginx目录写入一个html
vim index.html
this is a test!
7.重新加载配置文件
/usr/local/nginx/sbin/nginx -s reload
8.测试
curl localhost
1.创建多一个虚拟主机配置
vim/usr/local/nginx/conf/vhost/test.conf
添加如下配置:
server
{
listen 80;
server_name test.com;
index index.html index.html index.php;
root /data/nginx1;
location/ //指定要做用户认证目录、文件、html
{
auth_basic "Auth"; //打开认证
auth_basic_user_file /usr/local/nginx/conf/vhost/htpasswd; //指定密码文件
}
}
/usr/local/nginx/sbin/nginx -t 检查语法
yum install -y httpd //安装httpd,因为要借用httpd生成密码文件
find / -name htpasswd //查找htpasswd工具在哪
/usr/bin/htpasswd //一般yum安装得再这里
/usr/bin/htpasswd -c /usr/local/nginx/conf/vhost/htpasswdtest // 生成密码文件,输入密码
mkdir nginx1 创建站点目录
cd nginx1 echo “this is test”> index.html //写入内容
/usr/local/nginx/sbin/nginx -s reload //重新加载配置文件
curl -x127.0.0.1:80 test.com -utest:test //测试 -u 输入账号密码
类似httpd的域名跳转
在原先用户认证上添加配置:如下
server
{
listen 80;
server_name test.com test1.com test2.com ;
index index.html index.html index.php;
root /data/nginx1;
if ($host != 'test.com' ){ //如果host不等于则rewrite
rewrite ^/(.*)$ http://test.com/$1 permanent; // ^任意开头(比如httpd://) (.*)通配 $到结尾
}
}
permanent 表示永久重定向 (301) redirect临时重定向(302)
/usr/local/nginx/sbin/nginx -t
/usr/local/nginx/sbin/nginx -s reload
curl -I -x127.0.0.1:80 test1.com //测试下图可以看到location跳转到 test.com
12.10 Nginx访问日志
1.首先我们进入cat /usr/local/nginx/conf/nginx.conf 里面 下图是定义格式//这里log_format 我定义了etc(可以随意定义)
相对应参数意义
2.然后再配置文件添加配置
vim /usr/local/nginx/conf/vhost/test.conf
添加:
access_log/nginx_log/nginx.log etc;
定义日志存放路径, 后面跟格式名就是刚才在nginx.conf里面定义的log_format ,不定义会默认日志格式
3./usr/local/nginx/sbin/nginx -t
/usr/local/nginx/sbin/nginx -sreload
4.测试
curl-I -x127.0.0.1:80 test1.com
查看日志:
cat/nginx_log/nginx.log //可以下图相对应的就是nginx.conf设置的格式
要想切割nginx日志需要借助系统的切割工具或者自定义脚本
下面示例自定义脚本切割+任务计划实现
1. 创建一个脚本文件 //脚本最好都放在/usr/local/sbin下
vim /usr/sbin/nginx_log_rotate.sh
#! /bin/bash
d=`date -d "-1 day" +%Y%m%d` //定义变量
logdir="/nginx_log/" //指定日志切割路径
nginx_pid="/usr/local/nginx/logs/nginx.pid" //指定pid
cd $logdir
for log in `ls *.log`
do
mv $log$log-$d //把原先的日志做个改名
done
/bin/kill -HUP `cat$nginx_pid`
2. 运行脚本 //加个-x查看过程
sh-x /usr/sbin/nginx_log_rotate.sh
3.查看日志有没有生效
cd /nginx_log | ls
4.指定任务计划
0 0 * * * /bin/bash/usr/sbin/nginx/nginx_log_rotate.sh 每天凌晨运行此脚本
12.12 静态文件不记录日志和过期时间
1.在虚拟主机配置文件添加以下配置:
location~ .*\.(gif|jpg|jpeg|png|bmp|swf)$ //匹配
{
expires 7d; //缓存时间
access_log off;
}
location ~ .*\.(js|css)$
{
expires 12h;
access_log off;
}
2. /usr/local/nginx/sbin/nginx -t
/usr/local/nginx/sbin/nginx -s reload
3. curl -x127.0.0.1:80 test.com/1.jpg 可以看到以下图没记录,当我输入jpgass就有记录了,证明生效
4.curl -x127.0.0.1:80 test.com/1.jpg -I //查询缓存时间 max-age=604800 等于7天也生效了
12.13Nginx防盗链
vim /usr/local/nginx/conf/vhost/test.com
1.添加如下配置:
location~* ^.+\.(gif|jpg|jpeg|png|bmp|swf)$ //定义格式
{
expires 7d; //缓存时间
valid_referers noneblocked server_names*.etc.com; //白名单
if ($invalid_referer){ 条件
return403; 返回结果
}
access_log off;
}
2. /usr/local/nginx/sbin/nginx -t
/usr/local/nginx/sbin/nginx -s reload
3.测试
curl -e"http://www.aaa.com" -x127.0.0.1:80 test.com/1.jpg -I
curl -e “http://www.etc.com”-x127.0.0.1:80 test.com/1.jpg -I
12.14 Nginx访问控制
和httpd一样,Nginx也需要限制某些IP不能访问或者只允许某些IP访问。和httpd不一样,他没有order顺序。
1.vim /usr/local/nginx/conf/vhost/test.com
添加如下配置
location /admin/
{
allow 193.168.142.5; //允许访问的IP
allow 127.0.0.1;
denyall; //除了以上2个IP,其他全部拒绝
}
2.
/usr/local/nginx/sbin/nginx -t
/usr/local/nginx/sbin/nginx -s reload
3.测试
curl -x192.168.214.128:80 test.com/admin/ //这个没加入白名单所以被拒绝了
curl -x127.0.0.1:80 test.com/admin/ //这个加入了白名单可以访问
如果你只想配置黑名单,只需要填写deny IP地址 就行了!
还有一种跟httpd类似的禁止PHP解析(一般用在图片上传目录)
1..vim /usr/local/nginx/conf/vhost/test.com
2.添加如下配置:
location~.*(abc|zxc)/.*\.php$ //表示匹配abc或者zxc目录,并且.*PHP的请求拒绝访问
{
deny all;
}
3.创建
mkdir abc ;echo "1111">abc/1.php
4.
/usr/local/nginx/sbin/nginx -t
/usr/local/nginx/sbin/nginx -s reload
5.测试:
curl -x127.0.0.1:80 test.com/abc/1.php
通过user_agent来进行限制
1..vim /usr/local/nginx/conf/vhost/test.com
2.添加配置
if ($http_user_agent ~'abc|qwe|zxc') //匹配abc、qwe、zxc的字符串都会拒绝
{
return 403;
}
3.
/usr/local/nginx/sbin/nginx -t
/usr/local/nginx/sbin/nginx -s reload
4.测试:
curl -A "abc" -x127.0.0.1:80 test.com //失败
curl -A “asdqwdwq” -x127.0.0.1 test.com //成功
12.15 Nginx解析php相关配置
在LAMP中,PHP是作为httpd的一个模块出现,只要PHP模块被加载,那么就能解析PHP脚本了,而在LANP中,PHP是以一个服务(php-fpm)的形式存在的,首先要启动php-fpm服务,然后nginx再和php-fpm通信,也就是说,处理PHP脚本解析的工作是由php-fpm来完成的,nginx仅仅是一个搬运工,它把用户的请求传递给php-fpm,php-fpm处理完成后把结果传递回给nginx,nginx再把结果返回给用户。
1.vim /usr/local/nginx/conf/vhost/test.com
2.添加如下配置:
location~ \.php$
{
include fastcgi_params;
fastcgi_pass unix:/tmp/php-fcgi.sock; \\指定PHP-fpm的地址,如果监听是tcp:port就要写tcp:port
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /data/nginx1$fastcgi_script_name; \\指定站点目录
}
3.
/usr/local/nginx/sbin/nginx -t
/usr/local/nginx/sbin/nginx -s reload
4.创建一个php文件进行测试
vim 1.php
<?php
phpinfo();
5.测试:
curl -x127.0.0.1:80 test.com/1.php
1.创建一个配置文件
cd /usr/local/nginx/conf/vhost/
vim daili.conf
添加以下内容
server
{
listen 80; //端口
server_name ask.apelearn.com; //域名
location /
{
proxy_pass http://223.94.95.10/; //代理的服务器IP
proxy_set_header Host $host; //表示后端web的域名要与上面server_name域名保持一致
proxy_set_header X-Real-IP $remote_addr; //定义发往后端web服务器的请求头的客户端IP
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; //定义发往后端web服务器的请求头的代理服务器的IP
}
}
4.
/usr/local/nginx/sbin/nginx -t
/usr/local/nginx/sbin/nginx -s reload
5.测试
curl -x127.0.0.1:80 ask.apelearn.com -I