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

[经验分享] nginx高级配置

[复制链接]

尚未签到

发表于 2018-11-11 10:09:17 | 显示全部楼层 |阅读模式
  1. 配置第二个虚拟主机
  可以在nginx.conf 加一行
  include  vhosts/*.conf;
  这样,我们就可以在 /usr/local/nginx/conf/vhosts目录下创建虚拟主机配置文件了。mkdir  /usr/local/nginx/conf/vhosts
  cd !$
  vim  chinaops.conf   // 加入
  server
  {
  listen 80;
  server_name chinaops.com www.chinaops.com www.china-ops.com   ;
  index index.html index.htm index.php;
  root /data/www2;
  location ~ \.php$ {
  include fastcgi_params;
  fastcgi_pass unix:/tmp/php-fcgi.sock;
  fastcgi_index index.php;
  fastcgi_param SCRIPT_FILENAME /data/www2$fastcgi_script_name;
  }
  }
  2. 验证默认虚拟主机
  listen       80 default_server;
  3. 用户认证
  首先需要安装apache,可以使用yum install httpd 安装
  生成密码文件,创建用户
  htpasswd -c /usr/local/nginx/conf/htpasswd  test // 添加test用户,第一次添加时需要加-c参数,第二次添加时不需要-c参数
  在nginx的配置文件中添加
  location  / {
  root /data/www/wwwroot/count;
  auth_basic              "Auth";
  auth_basic_user_file   /usr/local/nginx/conf/htpasswd;
  }
  4. 域名重定向
  server_name  chinaops.com  www.chinaops.com www.china-ops.com  ;
  if ($host != 'www.chinaops.com' ) {
  rewrite  ^/(.*)$  http://www.chinaops.com/$1  permanent;
  }
  5. 日志相关
  日志切割:
  编写脚本:
  vim  /usr/local/sbin/logrotate.sh  //加入
  #! /bin/bash
  datedir=`date +%Y%m%d`
  /bin/mkdir  /home/logs/$datedir >/dev/null 2>&1
  /bin/mv /home/logs/*.log /home/logs/$datedir
  /bin/kill -HUP `cat /var/run/nginx.pid`
  日志格式
  log_format main '$remote_addr - $remote_user [$time_local] $request '
  '"$status" $body_bytes_sent "$http_referer" '
  '"$http_user_agent" "$http_x_forwarded_for"';
  log_format main1 '$proxy_add_x_forwarded_for - $remote_user [$time_local] '
  '"$request" $status $body_bytes_sent '
  '"$http_referer" "$http_user_agent"';  //此日志格式为,ip不仅记录代理的ip还记录远程客户端真实IP。
  错误日志error_log日志级别
  error_log 级别分为 debug, info, notice, warn, error, crit  默认为crit, 该级别在日志名后边定义格式如下:
  error_log  /your/path/error.log crit;
  crit 记录的日志最少,而debug记录的日志最多。如果你的nginx遇到一些问题,比如502比较频繁出现,但是看默认的error_log并没有看到有意义的信息,那么就可以调一下错误日志的级别,当你调成error级别时,错误日志记录的内容会更加丰富。
  6. 静态文件不记录日志,配置缓存
  location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
  {
  expires      30d;
  access_log off;
  }
  location ~ .*\.(js|css)$
  {
  expires      12h;
  access_log off;
  }
  7.nginx 禁止恶意user_agent
  #禁止Scrapy等工具的抓取
  if ($http_user_agent ~* (Scrapy|Curl|HttpClient)) {
  return 403;
  }
  #禁止指定UA及UA为空的访问
  if ($http_user_agent ~ "FeedDemon|JikeSpider|Indy Library|Alexa Toolbar|AskTbFXTV|AhrefsBot|CrawlDaddy|CoolpadWebkit|Java|Feedly|UniversalFeedParser|ApacheBench|Microsoft URL Control|Swiftbot|ZmEu|oBot|jaunty|Python-urllib|lightDeckReports Bot|YYSpider|DigExt|HttpClient|MJ12bot|heritrix|EasouSpider|Ezooms|^$" ) {
  return 403;
  }
  #禁止非GET|HEAD|POST方式的抓取
  if ($request_method !~ ^(GET|HEAD|POST)$) {
  return 403;
  }
  8. 防盗链
  在 nginx.conf中的server部分中添加如下代码
  location ~* ^.+\.(gif|jpg|png|swf|flv|rar|zip|doc|pdf|gz|bz2|jpeg|bmp|xls)$ {
  valid_referers none blocked server_names  *.taobao.com *.baidu.com *.google.com *.google.cn *.soso.com ;  // 对这些域名的网站不进行盗链。
  if ($invalid_referer) {
  #                        return 403;
  rewrite ^/ http://www.example.com/nophoto.gif;
  }
  }
  说明:如果前面配置中已经加了                 location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
  {
  expires      30d;
  access_log off;
  }
  那么会和这一部分重复,这时候上面的生效,所以,我们需要把两者合在一起。如下:
  location ~* ^.+\.(gif|jpg|png|swf|flv|rar|zip|doc|pdf|gz|bz2|jpeg|bmp|xls)$
  {
  expires 30d;
  valid_referers none blocked server_names  *.taobao.com *.baidu.com *.google.com *.google.cn *.soso.com ;  // 对这些域名的网站不进行盗链。
  if ($invalid_referer) {
  #               return 403;
  rewrite ^/ http://www.example.com/nophoto.gif;
  }
  access_log off;
  }
  9. 访问控制
  限制只让某个ip访问
  allow          219.232.244.234;
  deny           all;
  禁止某个IP或者IP段访问站点的设置方法
  首先建立下面的配置文件放在nginx的conf目录下面,命名为deny.ip
  cat  deny.ip
  deny 192.168.1.11;
  deny 192.168.1.123;
  deny 10.0.1.0/24;
  在nginx的配置文件nginx.conf中加入:
  include deny.ip;
  重启一下nginx的服务:/usr/local/nginx/sbin/nginx  reload 就可以生效了。
  deny.ip 的格式中也可以用deny all;
  如果你想实现这样的应用,除了几个IP外,其他全部拒绝,
  那需要你在deny.ip 中这样写
  allow 1.1.1.1;
  allow 1.1.1.2;
  deny all;
  有时候会根据目录来限制php解析:
  location ~ .*(diy|template|attachments|forumdata|attachment|image)/.*\.php$
  {
  deny all;
  }
  使用 user_agent 控制客户端访问
  location /
  {
  if ($http_user_agent ~ 'bingbot/2.0|MJ12bot/v1.4.2|Spider/3.0|YoudaoBot|Tomato|Gecko/20100315'){
  return 403;
  }
  }
  10. nginx的rewrite应用
  Rewrite设置及示例 http://www.lishiming.net/thread-239-1-1.html
  nginx $document_uri 参数使用 http://www.lishiming.net/thread-993-1-1.html
  nginx的301与302如何配置 http://www.lishiming.net/thread-4840-1-1.html
  nginx rewrite不支持if 嵌套也不支持逻辑或和逻辑并  http://www.lishiming.net/thread-4842-1-1.html
  11. nginx 代理
  server {
  listen 80;
  server_name aaa.com;
  location / {
  proxy_pass      http://2.2.2.2/;
  proxy_set_header Host   $host;
  proxy_set_header X-Real-IP      $remote_addr;
  proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  }
  #            access_log  /home/logs/aaa_access.log combined;
  }
  如果后端的机器有多台
  upstream bbb
  {
  server  1.2.3.1:80;
  server  1.2.3.4:80;
  }
  server {
  listen 80;
  server_name bbb.com;
  location / {
  proxy_pass      http://bbb/;
  proxy_set_header Host   $host;
  proxy_set_header X-Real-IP      $remote_addr;
  proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  }
  #            access_log  /home/logs/bb_access.log combined;
  }
  代理一个服务器上所有域名
  首先在vhosts目录下需要建立两个文件,一个是servername 列表文件,一个是虚拟主机配置文件
  两个文件内容分别为
  (1) servername
  server_name www.123.net.cn  www.alsdjfl.com   www.asdfa1.com;  //就这么简单一行,当然这个server_name 还可以继续添加的
  (2) 虚拟主机配置文件
  server {
  listen 80;
  include vhosts/servername; // 这里的文件就是上边那个servername列表文件
  location / {
  proxy_pass     http://1.2.1.2/;  //这里就是需要做代理的服务器ip地址了
  proxy_set_header Host   $host;
  proxy_set_header X-Real-IP      $remote_addr;
  proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  }
  access_log  /dev/null;
  }


运维网声明 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-633588-1-1.html 上篇帖子: Nginx Unit 与 LEMUR 新架构 下篇帖子: Solaris 10 安装NGINX
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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