2012-03-04 25 views
12

Używam cienkiego serwera do obsługi mojej aplikacji Rails.Używanie cienkiego serwera WWW z HTTP i HTTPS

  • Uruchamianie serwera za pomocą thin start obsługuje żądania http.
  • Uruchamianie serwera za pomocą thin start --ssl obsługuje żądania https.

Czy istnieje sposób, aby mieć thin służyć zarówno http i https żądań jednocześnie?

Powód, dla którego pytam, ponieważ kiedy używam redirect_to some_path w moich kontrolerach, oni przekierowują do http. Ponieważ thin obsługuje żądania https, nic nie jest renderowane.

Uwaga: używam Rack::SSL w Rails 3.0.7.

+0

Najprostszą opcją jest prawdopodobnie uruchomienie dwóch oddzielnych instancji cienkiego: jednego akceptującego żądania SSL i jednego akceptującego żądania zwykłego tekstu. Każdy powód, dla którego nie chcesz tego robić? (Alternatywnie, jeśli cienki jest uruchomiony za innym serwerem WWW, takim jak Apache lub Nginx, wystarczy jedna instancja cienka: serwer frontend może zgłosić, czy żądanie zostało wysłane przez SSL). –

+0

Nie można uruchomić dwóch wystąpień 'cienka' na tym samym porcie. –

+3

Nie można również akceptować połączeń HTTP i HTTPS na tym samym porcie. (Z tego powodu, domyślnie konwencja, HTTP działa na porcie 80, podczas gdy HTTPS działa na porcie 443.) –

Odpowiedz

8

(Komentarz przekształca się odpowiedzieć na żądanie.)

opcja Najprostszy jest prawdopodobnie uruchomić dwie oddzielne instancje cienki: jeden akceptować żądania SSL i jeden przyjmowanie wniosków w postaci zwykłego tekstu. Każdy powód, dla którego nie chcesz tego robić? (Alternatywnie, jeśli cienki jest uruchomiony za innym serwerem WWW, takim jak Apache lub Nginx, potrzebujesz tylko jednego wystąpienia cienkiego: serwer frontend może zgłosić, czy żądanie zostało wysłane przez SSL.)

Nie można zaakceptować obu protokołów HTTP i połączenia HTTPS na tym samym porcie. (Z tego powodu, domyślnie konwencja, HTTP działa na porcie 80, podczas gdy HTTPS działa na porcie 443.)

4

możesz użyć majstra (https://github.com/ddollar/foreman);

Tworzysz plik Procfile z 2 procesami, a następnie uruchamiasz oba przy pomocy polecenia forman start.

umieścić to w pliku o nazwie Procfile:

web: thin start 
ssl: thin start --ssl 

następnie wykorzystać foreman start a on rozpocząć proces 2. Oto, czego używam ... mam nadzieję, że to ci pomoże!

+2

Jak to działa, skoro nie możesz mieć 2 instancji cienkiej pracy na tym samym porcie?I nawet jeśli uruchomisz instancję ssl na innym porcie, powiedz "thin start --ssl -p 3001", w jaki sposób inteligentnie obsługujesz przekierowania z http do https w twojej aplikacji? – jamesfzhang

+1

@ JZ11 Nginx będzie inteligentnie obsługiwać przekierowania/przekazy w zależności od protokołu. Ale chciałbym również poznać obejście tego problemu. –

Powiązane problemy