Nginx的SSL重写规则

我想redirect只有某些请求使用SSL而不是我的整个网站,但我不知道如何逃避这个redirect循环。 这里是我的服务器块,我尝试使用位置块redirectstream量:

server { listen 80; server_name example.com; rewrite ^ http://www.example.com$request_uri? permanent; } server { listen 80; listen 443 ssl; ssl_certificate /srv/ssl/sslchain.crt; ssl_certificate_key /srv/ssl/example.com.key; server_name www.example.com; location / { root /usr/local/bin/rails/example/public; index index.html index.htm; passenger_enabled on; } location /users/sign_up { rewrite ^ https://www.example.com/users/sign_up break; } location /users/sign_in { rewrite ^ https://www.example.com/users/sign_in break; } if ($host !~* ^(example.com|www.example.com)$){ return 502; } location ~* ^.+\.(jpg|jpeg|png|gif|css|js)$ { root /usr/local/bin/rails/example/public; passenger_enabled on; expires 31d; } error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } } 

我也尝试了'如果'块….

 if ($request_uri ~* /users/sign_up ) { rewrite ^ https://www.example.com/users/sign_up break; } 

我已经尝试过了,没有“rest”的说法。 我怎样才能redirect,而不会陷入redirect循环? 谢谢。

当用户已经通过SSL连接时,您需要避免redirect。

像这样的东西:

 location /users/sign_up { if ( $server_port = 80 ) { rewrite ^ https://www.example.com/users/sign_up break; } } location /users/sign_in { if ( $server_port = 80 ) { rewrite ^ https://www.example.com/users/sign_in break; } }