debuggingnginx URL重写:如何找出问题所在?

我在网站上有一个特定的url模式,需要redirect到HTTPS版本。 这是一个Django站点; Nginx会检查memcached中的每个URL,如果没有findcaching的版本,它会将请求代理到Django的Apache / mod_python来呈现页面。

相关的configuration块是

rewrite ^/certificate https://mysite.com/certificate ; rewrite ^/([a-zA-Z]{2})/certificate https://mysite.com/certificate ; 

…它似乎并没有工作。

Nginx是:

 $ nginx -V nginx version: nginx/0.7.65 built by gcc 4.2.4 (Ubuntu 4.2.4-1ubuntu4) TLS SNI support disabled configure arguments: --prefix=/usr/local/nginx --pid-path=/var/run/nginx.pid --with-http_gzip_static_module --with-http_ssl_module 

我怎样才能找出问题是我的模式不匹配,或更模糊的configuration问题?

(该网站本地化为三种语言,本地化在URLstring中,例如/US/news//DE/about等。它跟踪会话中的本地化,默认为美国,所以如果您刚才/news Django会重写/US/news除非用户有一个cookie,表明他们正在使用不同的本地化.Django处理这个,但不是Nginx。)

nginx的configuration正则expression式对花括号很挑剔,但是你可以使用它们, 如果你引用你的正则expression式…

 rewrite "^/([a-zA-Z]{2})/certificate" https://mysite.com/$1/certificate ; 

应该pipe用。

在重启时,Nginx开始抛出关于这个重写行的错误:

  [emerg]: directive "rewrite" is not terminated by ";" in /etc/nginx/sites-enabled/production:14 

这给了我一个预感的语法是错误的。 我删除了{2}并用+代替了它,这是一个不太精确,但也更兼容的正则expression式,现在它工作。 正确的正则expression式是

  rewrite ^/([a-zA-Z]+)/certificate https://mysite.com/$1/certificate ;