Performance penalty when using regular expressions in server_name?

Igor Sysoev igor at sysoev.ru
Thu Jan 30 06:52:56 UTC 2014


On Jan 29, 2014, at 23:52 , Igor Sverkos wrote:

> Hi,
> 
> let assume that we run the following domains:
> 
> - agoodexample.org
> - agoodexmaple.com
> - agoodexample.net
> - a-good-example.org
> - a-good-example.com
> - a-good-example.net
> 
> Our main site should be www.a-good-example.com -- people coming from any
> other mentioned domain/combination should be redirected to the main site.
> 
> I could now write a single server block like
> 
> server {
>     // ...
>     server_name ~^(?:www\.)?a[-]?good-example\.(?:org|net)$
>             ~^ a[-]?good-example\.com $;
> 
>     rewrite ^ $scheme://www.a-good-example.com $request_uri permanent;
> }
> 
> I am using regular expressions as server_name values, I think you get the
> point.
> 
> I could also avoid regular expressions:
> 
> server {
>     // ...
>     server_name agoodexample.org
>             a-good-example.org
>             www.agoodexample.org
>             www.a-good-example.org
>             agoodexample.net
>             a-good-example.net
>             www.agoodexample.net
>             www.a-good-example.net
>             agoodexample.com
>             www.agoodexample.com
>             a-good-example.com;
> 
>     rewrite ^ $scheme://www.a-good-example.com $request_uri permanent;
> }
> 
> 
> Q1: Are both configurations equal or is there any performance difference?
>    E.g. would you recommend one configuration more than the other?

The second is faster but I believe performance is negligible.
And it's better to use

return 301 $scheme://www.a-good-example.com/$request_uri;

> Q2: When using regular expressions in server_name, the regular expression
>    will also appear in the error_log. Is it possible to see the actual
>    name instead the expression in the log?
> 
> 
> I am using nginx-1.4.x with pcre-jit enabled.

$host.


-- 
Igor Sysoev
http://nginx.com



More information about the nginx mailing list