nginx配置记实

nginx的匹配顺序:

  • 1、完全匹配
  • 2、通配符在前的,如*.test.com
  • 3、通配在后的,如www.test.*
  • 4、正则匹配,如~^.www.test.com$

那么我们平时会用到比如nginx做负载配置、做二级域名泛匹配。那么这里就主要说一下这两个问题

首先说一下nginx中一些参数可以直接使用的

$args, 请求中的参数;
$content_length, HTTP请求信息里的"Content-Length";
$content_type, 请求信息里的"Content-Type";
$document_root, 针对当前请求的根路径设置值;
$document_uri, 与$uri相同;
$host, 请求信息中的"Host",如果请求中没有Host行,则等于设置的服务器名;
$limit_rate, 对连接速率的限制;
$request_method, 请求的方法,比如"GET"、"POST"等;
$remote_addr, 客户端地址;
$remote_port, 客户端端口号;
$remote_user, 客户端用户名,认证用;
$request_filename, 当前请求的文件路径名
$request_body_file
$request_uri, 请求的URI,带查询字符串;
$query_string, 与$args相同;
$scheme, 所用的协议,比如http或者是https,比如rewrite ^(.+)$ $scheme://example.com$1 redirect;
$server_protocol, 请求的协议版本,"HTTP/1.0"或"HTTP/1.1";
$server_addr, 服务器地址,如果没有用listen指明服务器地址,使用这个变量将发起一次系统调用以取得地址(造成资源浪费);
$server_name, 请求到达的服务器名;
$server_port, 请求到达的服务器端口号;
$uri, 请求的URI,可能和最初的值有不同,比如经过重定向之类的。
  1. nginx做负载配置

我使用到配置方式文件如下:

###去水印域名
    upstream apigatewayurl 
    {
      server 172.18.65.108:8801  weight=40 max_fails=20 fail_timeout=30s;
     server 172.18.65.108:8802  weight=40 max_fails=20 fail_timeout=30s;
      ip_hash;
    }

    ###域名
  server {
    listen       80;
    server_name  www.xxxx.com;
    ### 防止抓取配置
    include       /usr/local/nginx/conf/agent_deny.conf;
    location /api/ {
        proxy_pass http://apigatewayurl/; 
        proxy_set_header host $host;
        proxy_set_header clientIP $remote_addr;
        proxy_set_header forwarded-for $proxy_add_x_forwarded_for;
      }
   }

防止抓取配置(注:如果有需要向外提供接口的不要加入这个配置)

#crapy等工具的抓取
if ($http_user_agent ~* (Scrapy|Curl|HttpClient)) {
	 return 403;
}

#禁止指定UA及UA为空的访问
if ($http_user_agent ~ "WinHttp|WebZIP|FetchURL|node-superagent|java/|FeedDemon|Jullo|JikeSpider|Indy Library|Alexa Toolbar|AskTbFXTV|AhrefsBot|CrawlDaddy|Java|Feedly|Apache-HttpAsyncClient|UniversalFeedParser|ApacheBench|Microsoft URL Control|Swiftbot|ZmEu|oBot|jaunty|Python-urllib|lightDeckReports Bot|YYSpider|DigExt|HttpClient|MJ12bot|heritrix|EasouSpider|Ezooms|BOT/0.1|YandexBot|FlightDeckReports|Linguee Bot|^$" ) {
	 return 403;             
}

#禁止非GET|HEAD|POST方式的抓取
if ($request_method !~ ^(GET|HEAD|POST|OPTIONS)$) {
	return 403;
}
  1. nginx做反向文件代理有三种

(1). 直接取某一个指定的文件,如苹果在微信开放平台上的Ulink

    ### 苹果需要的Ulink 文件
   location ~* apple-app-site-association$ {
   default_type application/json;
   alias   /file/xxxxx..../apple-app-site-association;
	##index fileauth.txt;
   }

(2)、root直接文件配置

    location / {
         root /file/jianbianassets/policy/;
         index  potato_privacy.html;
    }

(3)、使用alias配置

      location /assets/ {
            alias /file/assets/;
     }

3、ngin泛二级域名配置,不用每次添加一个二级域名都去修改nginx配置,直接上代码

server {
server_name ~^((?<subdomain>.*)\.)?(?<domain>[^.]+)\.com$;
	listen       80;
	include       /usr/local/nginx/conf/agent_deny.conf;
	if ($subdomain = "") {
		## 如果前面省略,那么可以使用设置值 或重定向
		#set $subdomain "www";   
		rewrite www.${domain}.com
	}
	location / {
		index index.html;
		root /home/jar/xxx/website/web_${domain}/${subdomain};
	}
}

如你的域名为 video.ezhanshuju.com 那么你对应的文件路径就应该是在
/home/jar/xxx/website/web_ezhanshuju/video/路径下

4、重定向

rewrite 指令:可以使用在 server, location, if 区域;

语法:rewrite regex replacement flag

按照相关的正则表达式与字符串修改URI,指令按照在配置文件中出现的顺序执行。

可以在重写指令后面添加标记。

如果替换的字符串以http://开头,请求将被重定向,并且不再执行多余的rewrite指令。

尾部的标记(flag)可以是以下的值:

  • last - 完成重写指令,之后搜索相应的URI或location。
  • break - 完成重写指令。
  • redirect - 返回302临时重定向,如果替换字段用http://开头则被使用。
  • permanent - 返回301永久重定向。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值