2014-06-11 7 views
0

У меня есть VPS с приложением Rails 4, работающим на Ubuntu, NginX и Unicorn.Как перенаправить все запросы на субдомен www, включая запросы https?

Как я хочу, чтобы все страницы были зашифрованы SSL, все запросы на http:// отправляются в https://, который работает нормально.

Это отрывок из моей конфигурации Nginx:

http { 

     .... 

     server { 
       listen 80; 
       server_name example.com; 
       rewrite^https://$server_name$request_uri? permanent; 
     } 

     server { 
       listen 443; 
       server_name example.com; 
       root /home/rails/public; 
       index index.htm index.html; 

       ssl on; 
       ssl_certificate /etc/ssl/example.com.crt; 
       ssl_certificate_key /etc/ssl/example.com.key; 

       location/{ 
         try_files $uri/index.html $uri.html $uri @app; 
       } 

       location @app { 
         proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
         proxy_set_header X-Forwarded-Proto $scheme; 
         proxy_set_header Host $host; 
         proxy_pass http://app_server; 
       } 
     } 
} 

Как я могу сделать это, что все запросы к http://example.com и https://example.com направляются https://www.example.com?

Спасибо за любую помощь.

+0

Я думаю, использование промежуточного программного обеспечения для стойки может решить эту проблему. Проверьте это [Railscast] (http://railscasts.com/episodes/151-rack-middleware) – Himesh

ответ

1

Мы используем это в apache2:

<VirtualHost *80> 
    ServerName frontlineutilities.co.uk 
    ServerAlias www.frontlineutilities.co.uk 
</VirtualHost> 

Docs

Изучив how you'd achieve this in Nginx, я нашел это:

server { 
    listen  80; 
    server_name example.org www.example.org; 
    ... 
} 

-

Захват просит

Причина, почему я написал это в ответ, потому что ваш выбор, использовать ли Middleware или сам веб-сервер

Хотя я не знаю специфику, я сделать знаю, что добавление к Rails промежуточное ПО в конечном итоге приведет к раздуванию. Я твердо сторонник modular programming - и с удовольствием отдельных функций в различные части стека

Проблема у вас есть на самом деле не rails один - это проблема сервера (как маршрутизировать все запросы к www.). Поэтому я настоятельно рекомендую вам сосредоточиться на сервере, чтобы отсортировать его. Как и в конце концов, сервер для захвата запросов на ваш сервер IP & направит их соответственно

Я бы начал с ресурсов выше & Работа для перенаправления на сервере. Это не имеет значения для рельсов вы отправляете ли запрос на www. или стандартную domain

+1

Спасибо за хорошую запись. Я не мог заставить это работать, хотя, вероятно, из-за моего отсутствия опыта в Apache & NginX. – Tintin81

+0

У вас есть отзывы? Ошибки/запросы? –

1

Если вы хотите настроить, который перенаправляет http://example.com или https://example.com к http://www.example.com и https://www.example.com

Ниже следует сделать редирект

server { 
    listen 80; 
    server_name example.com; 
    rewrite ^/(.*) https://www.example.com$request_uri permanent; 
} 
server { 
    listen 443; 
    server_name example.com; 
    rewrite ^/(.*) https://www.example.com$request_uri permanent; 
} 

Также вы изменили исходное имя_сервера на www.example.com Надеюсь, это поможет.

+0

Спасибо.Он работает для нормальных доменов 'http: //', когда я добавляю строку 'rewrite ^/(. *) Https: //www.example.com$request_uri constant;' в первый блок (тот, кто прослушивает порт 80). Когда я добавляю одну и ту же строку ко второму блоку, я получаю в браузере слишком много ошибок при переадресации. Как это можно зафиксировать? – Tintin81

Смежные вопросы