设为首页 收藏本站
查看: 1243|回复: 0

[经验分享] Nginx的基本配置

[复制链接]

尚未签到

发表于 2018-11-11 11:26:33 | 显示全部楼层 |阅读模式
  上篇文章介绍了基于LNMP搭建discuz!论坛:http://msiyuetian.blog.51cto.com/8637744/1691635
  下面我们接着对nginx进行基本的配置
  1、nginx的用户认证
  需求:对管理中心登入界面进行二次验证,网址为http://www.test.com/admin.php,即对访问admin.php文件进行验证。
DSC0000.jpg

  (1)用户认证需要用到htpasswd工具来生成密码文件,这个工具是Apache的,所以我们要先安装Apache。
[root@tpp ~]# yum install -y httpd  [root@tpp ~]# which htpasswd         //查看htpasswd路径
  /usr/bin/htpasswd
  接着创建tpp用户,并生成一个密码文件
[root@tpp ~]# /usr/bin/htpasswd -c /usr/local/nginx/conf/.htpasswd tpp
DSC0001.jpg

  
  (2)配置虚拟主机文件
[root@tpp ~]# vim /usr/local/nginx/conf/vhosts/test.conf      //添加如下代码  location ~ .*admin\.php$ {
  auth_basic "testlinux auth";
  auth_basic_user_file /usr/local/nginx/conf/.htpasswd;
  include fastcgi_params;
  fastcgi_pass unix:/tmp/www.sock;
  fastcgi_index index.php;
  fastcgi_param SCRIPT_FILENAME /data/www$fastcgi_script_name;
  }
  如下图:
DSC0002.jpg

  我们重新加载下nginx
[root@tpp ~]# /etc/init.d/nginx>  注:如果只是对目录,这个目录必须是网站的根目录下的目录,例:/data/www/abc/。而且也不用写解析php的代码。如下:
location ~ /abc/ {  auth_basic "testlinux auth";
  auth_basic_user_file /usr/local/nginx/conf/.htpasswd;
  }
  (3)验证
  我们再次访问管理中心时候,就会提示要进行认证。如下图:
DSC0003.jpg

  验证成功后,我们就可以进入管理中心的登入页面了。
DSC0004.jpg

  注:如果没有跳出验证界面,可能就是我们的浏览器有缓存,我们清理下就行了。或者你也可以用curl来进行测试:
[root@tpp ~]# curl -x127.0.0.1:80 -utpp:123456 www.test.com/admin.php  当出现了网页代码就表示成功了,如下图:
DSC0005.jpg

  2、nginx域名跳转
  需求:要把访问域名 www.aaa.com(或www.bbb.com) 的域名转发到 www.test.com 上。
  实现:找到本机 C:\Windows\System32\drivers\etc下的hosts文件,修改下面内容后保存退出。
192.168.0.109 www.tpp.com www.aaa.com www.bbb.com  配置虚拟主机文件
[root@tpp ~]# vim /usr/local/nginx/conf/vhosts/test.conf             //修改如下代码  server_name www.test.com www.aaa.com www.bbb.com;
  if ($host != 'www.test.com')
  {
  rewrite ^/(.*)$ http://www.test.com/$1 permanent;
  }
  如图:
DSC0006.jpg

  保存退出后,重新加载nginx
[root@tpp ~]# /etc/init.d/nginx>  测试下:
[root@tpp ~]# curl -x127.0.0.1:80 www.aaa.com -I  HTTP/1.1 301 Moved Permanently       //301状态
  Server: nginx/1.4.4
  Date: Mon, 07 Sep 2015 21:08:28 GMT
  Content-Type: text/html
  Content-Length: 184
  Connection: keep-alive
  Location: http://www.test.com/       //成功跳转
  下面我们在浏览器输入www.aaa.com或者www.bbb.com时,会自动跳转到www.test.com去。
  rewrite 指令最后一项参数flag标记说明:
  last:本条规则匹配完成后,继续向下匹配新的 location URI 规则
  break:本条规则匹配完成即终止匹配,不再匹配后面的任何规则。
  redirect:返回302临时重定向,浏览器地址栏会显示跳转后的URL地址。
  permanent:返回301永久重定向,浏览器地址栏会显示跳转后的URL地址。
  说明使用last和break实现URI重写,浏览器地址栏不变;而且两者有细微差别,使用alias指令必须用
  last标记;使用proxy_pass指令时,需要使用break标记。Last标记在本条rewrite规则执行完毕后,会
  对其所在server{......}标签重新发起请求,而break标记则在本条规则匹配完成后,终止匹配。
  
  3、nginx日志切割
  首先先查主配置文件中定义的日志格式
[root@tpp ~]# cat /usr/local/nginx/conf/nginx.conf  可以看到日志定义的格式为:log_format 名字为:combined_realip 如下图:
DSC0007.jpg

  接着配置虚拟主机文件
[root@tpp ~]# cd /usr/local/nginx/conf/vhosts/  [root@tpp vhosts]# vim test.conf                  //添加下面一行
  access_log /tmp/access.log combined_realip;
DSC0008.jpg

  保存退出后,重新加载nginx
[root@tpp ~]# /etc/init.d/nginx>  刷新论坛,然后我们看看是否生成了日志文件
[root@tpp vhosts]# ls /tmp/access.log  /tmp/access.log
  [root@tpp vhosts]# cat /tmp/access.log
DSC0009.jpg 接着创建一个切割日志的脚本

[root@tpp ~]# vim /usr/local/sbin/logrotate.sh     //写入以下内容  #! /bin/bash
  d=`date -d "-1 day" +%F`
  [ -d /tmp/nginx_log ] || mkdir /tmp/nginx_log      //相当于if命令 -d为判断文件是否存在
  mv /tmp/access.log /tmp/nginx_log/$d.log
  /etc/init.d/nginx>  cd /tmp/nginx_log/
  gzip -f $d.log                                     //压缩日志文件,不保留原文件
DSC00010.jpg

  保存退出后,我们来执行下脚本
[root@tpp vhosts]# sh -x /usr/local/sbin/logrotate.sh  ++ date -d '-1 day' +%F
  + d=2015-09-08
  + '[' -d /tmp/nginx_log ']'
  + mkdir /tmp/nginx_log
  + mv /tmp/access.log /tmp/nginx_log/2015-09-08.log
  + /etc/init.d/nginx>  + cd /tmp/nginx_log/
  + gzip -f 2015-09-08.log
  [root@tpp vhosts]# ls /tmp/nginx_log/
  2015-09-08.log.gz                           //生成了以时间为命名的日志文件
  [root@tpp vhosts]# ls /tmp/access.log
  /tmp/access.log                             //重新生成了新的access.log文件
  然后我们把/usr/local/sbin/logrotate.sh加入到执行计划里面去,让其每天凌晨1点执行一次。
  首先给这个shell文件添加可执行的权限
[root@tpp vhosts]# chmod a+x /usr/local/sbin/logrotate.sh  然后加入到任务计划中
[root@tpp vhosts]# crontab -e  00 01 * * * /usr/local/sbin/logrotate.sh
  退出保存后重启下crond服务
[root@tpp vhosts]# service crond restart  4、nginx不记录指定文件类型日志
  日志文件默认会每次都会把很多图片以及一些css,js等文件记录下来,这让日志文件会变得很大,下面我们对日志进行设定,日志不去记录这些文件。我们配置虚拟主机文件
[root@tpp ~]# cd /usr/local/nginx/conf/vhosts/  [root@tpp vhosts]# vim test.conf                  //添加如下的location方式
  location ~ .*\.(gif|jpg|jpeg|pen|bmp|swf)$
  {
  access_log off;
  }
  location ~ \.(js|css)
  {
  access_log off;
  }
  location ~ (static|cache)
  {
  access_log off;
  }
  如图:
DSC00011.jpg

  保存退出后,重新加载nginx
[root@tpp ~]# /etc/init.d/nginx>
  刷新论坛,然后我们可以去日志文件看看是否记录了这些文件。
  5、配置静态文件过期时间
  配置静态文件缓存,像图片、css、js等静态文件,我们设置过期时间,过期后会重新加载。配置虚拟主机文件,直接在之前配置不记录日志的地方更加一句过期时间命令就行了。
[root@tpp ~]# cd /usr/local/nginx/conf/vhosts/  [root@tpp vhosts]# vim test.conf
  location ~ .*\.(gif|jpg|jpeg|pen|bmp|swf)$
  {
  access_log off;
  expires 15d;         //15天后过期
  }
  location ~ \.(js|css)
  {
  access_log off;
  expires 2h;          //2小时后过期
  }
  location ~ (static|cache)
  {
  access_log off;
  }
  如图:
DSC00012.jpg

  保存退出后,重新加载nginx
[root@tpp ~]# /etc/init.d/nginx>
  下面我们来测试下,刷新下论坛网页,按F12,查看下
DSC00013.jpg

  或者我们直接用curl测试上面的URL
[root@tpp vhosts]# curl -x127.0.0.1:80 http://www.test.com/static/js/common.js?e9v -I  如图:
DSC00014.jpg

  6、nginx配置防盗链
[root@tpp ~]# cd /usr/local/nginx/conf/vhosts/  [root@tpp vhosts]# vim test.conf                      //我们在之前的基础上加上如下标红命令
  location ~ .*\.(gif|jpg|jpeg|pen|bmp|swf|mp3|mp4|flv|rar|zip|gz|bz2)$
  {
  access_log off;
  expires 15d;
  valid_referers none blocked *.test.com *.aaa.com *.bbb.com;
  if ($invalid_referer)
  {
  return 403;
  }
  }
  如图:
DSC00015.jpg

  保存退出后,重新加载nginx
[root@tpp ~]# /etc/init.d/nginx reload  我们在网页上找一张图片进行测试
  (1)测试能不能访问(结果:能访问)
[root@tpp vhosts]# curl -I -x127.0.0.1:80 http://www.test.com/static/image/common/logo_88_31.gif
DSC00016.jpg

  (2)测试能不能上传到百度去(结果:禁止)
[root@tpp vhosts]# curl -e "http://www.baidu.com" -I -x127.0.0.1:80 http://www.test.com/static/image/common/logo_88_31.gif
DSC00017.jpg

  (3)测试白名单网站(结果:能上传)
[root@tpp vhosts]# curl -e "http://www.test.com" -I -x127.0.0.1:80 http://www.test.com/static/image/common/logo_88_31.gif
DSC00018.jpg

  7、nginx访问控制
  情景一:有时候查看日志的时候发现有IP***网站,那么我们就可以禁掉该IP地址。
  这里我们就要配置全局的黑名单,会一条一条的匹配,当被匹配到名单后就立即执行,后面的所有名单就不管了。
  配置虚拟主机文件
[root@tpp ~]# cd /usr/local/nginx/conf/vhosts/  [root@tpp vhosts]# vim test.conf                    //在location模块之前定义
  deny 127.0.0.1;
  deny 1.1.1.1;
  如图:
DSC00019.jpg

  保存退出后,重新加载nginx
[root@tpp ~]# /etc/init.d/nginx reload  测试:
  本机地址测试下(结果:能访问)
  [root@tpp vhosts]# curl -x192.168.0.109:80 www.test.com/forum.php -I
  如图:
DSC00020.jpg

  127.0.0.1测试下(结果:禁止访问)
  [root@tpp vhosts]# curl -x127.0.0.1:80 www.test.com/forum.php -I
  如图:
DSC00021.jpg

  情景二:也有时候设置只对某些IP才能访问特定网页,比如管理中心网址只有管理员的IP才能访问。
  因为我们之前对管理中心网址进行了用户验证的配置,我们可以取消用户验证,而是来设置访问IP的白名单,安全性能比用户验证更高。下面我们直接对location模块中admin.php进行设置
[root@tpp ~]# cd /usr/local/nginx/conf/vhosts/  [root@tpp vhosts]# vim test.conf                 //添加白名单
  allow 127.0.0.1;
  deny all;
DSC00022.jpg

  保存退出后,重新加载nginx
[root@tpp ~]# /etc/init.d/nginx reload  测试下:
  (1)白名单访问管理中心网址,结果:能访问
[root@tpp vhosts]# curl -x127.0.0.1:80 www.test.com/admin.php -I
DSC00023.jpg

  (2)其他的IP访问管理中心网址,结果:不能访问
[root@tpp vhosts]# curl -x192.168.0.109:80 www.test.com/admin.php -I
DSC00024.jpg

  (3)其他的IP访问网址首页,结果:能访问
[root@tpp vhosts]# curl -x192.168.0.109:80 www.test.com/forum.php -I
DSC00025.jpg

  从如上几个测试可知,管理中心的网址只有白名单IP才能访问,其他的IP都不能访问。
  我们也可以对一个目录进行访问控制,直接添加location模块就行
location ~ /abc/ {  allow 127.0.0.1;
  deny all;
  }
  8、nginx禁止指定user_agent
  有时候网址访问量很大,很费资源,我们可以禁掉一些不重要的搜索。禁掉baidu,虽然百度能够正常搜索到网站,但是百度的搜索引擎爬虫抓不到网址的数据。
  配置虚拟主机文件:
[root@tpp ~]# cd /usr/local/nginx/conf/vhosts/  [root@tpp vhosts]# vim test.conf                    //添加以下
  if ($http_user_agent ~* 'baidu|youdao|1111')        //"~"后面紧跟"*"表示不区分大小写
  {
  return 403;
  }
DSC00026.jpg

  保存退出后,重新加载nginx
[root@tpp ~]# /etc/init.d/nginx reload  测试下
  不含baidu、youdao、1111是通的:
[root@tpp vhosts]# curl -A "qeasdrftgyhuj" -x192.168.0.109:80 www.test.com/forum.php -I
DSC00027.jpg

  含有baidu、youdao、1111则禁止访问:
[root@tpp vhosts]# curl -A "qeasdrbaiduftgyhuj" -x192.168.0.109:80 www.test.com/forum.php -I
DSC00028.jpg

  9、nginx的代理功能
  我们不能访问Google,但可以在香港或者国外服务器上做个nginx代理,然后我们通过代理访问,不过前提是该服务器能够访问Google。同样的道理,有些地方不能访问百度,而我们可以访问,故我们用百度来做个nginx代理实验。
  首先查看下百度的真实的网站IP
[root@tpp ~]# dig www.baidu.com     //若没有该命令,可以yum install -y bind*安装
DSC00029.jpg

  如下图可以看到两个IP:115.239.211.112和115.239.210.27
  下面我们新建虚拟主机
[root@tpp ~]# cd /usr/local/nginx/conf/vhosts/  [root@tpp vhosts]# vim proxy.conf
  server {
  listen 80;
  server_name www.baidu.com;
  location / {
  proxy_pass http://115.239.211.112/;
  }
  }
  保存退出后,重新加载nginx
[root@tpp ~]# /etc/init.d/nginx>  测试下(把百度的IP解析到本机IP,然后再访问百度)
[root@tpp vhosts]# curl -x127.0.0.1:80 www.baidu.com -I
DSC00030.jpg

  我们在上面测试出百度网站有两个真实的IP,下面我们就可以用多个IP解析到百度,实现负载均衡。
  修改虚拟主机配置文件
[root@tpp vhosts]# vim proxy.conf  upstream tpp{                           //tpp为自定义的名字
  server 115.239.211.112:80;
  server 115.239.210.27:80;
  }
  server {
  listen 80;
  server_name www.baidu.com;
  location / {
  proxy_pass http://tpp/;
  proxy_set_header Host $host;
  }
  }
  如图
DSC00031.jpg

  测试下
[root@tpp vhosts]# curl -x127.0.0.1:80 www.baidu.com -I
DSC00032.jpg




运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.iyunv.com/thread-633649-1-1.html 上篇帖子: 403 Forbidden ----- nginx/1.2.2 下篇帖子: LB集群之nginx-M四月天
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表