Joker karakter alt alanlarını https'ye (nginx) yönlendir


20

Bir joker karakter ssl sertifikası var ve tüm ssl olmayan trafiği ssl'ye yönlendirmeye çalışıyorum. Şu anda iyi çalışan subdomainded url yeniden yönlendirme için aşağıdaki kullanıyorum.

server {
listen      80;
server_name mydomain.com;

#Rewrite all nonssl requests to ssl.
rewrite     ^ https://$server_name$request_uri? permanent;
}

* .etkialanim.com için aynı şeyi yaptığımda, mantıksal olarak

https://%2A.mydomain.com/

Tüm alt alanları https eşdeğerlerine nasıl yönlendirirsiniz?


2
$ Server_name yerine neden $ host olmasın?
cjc

Yanıtlar:


47

Bu kadar...

server {
    listen      80;
    server_name *.mydomain.com;

     #Rewrite all nonssl requests to ssl.
     return 301 https://$host$request_uri;
}

2
Biraz daha fazla açıklama bunu daha iyi bir cevap yapabilir.
Dave M

3
@ dave-m, açıklanması gereken? $hostdeğişken? $request_uri?
cadmi

Çalışmıyor, hala https: //%2A.handy.travel/ var
Damon Yuan

2

NGINX resmi belgeleri, yeniden yönlendirmeyi gerçekleştirmek için yeniden yazma yönergesi kullanmak yerine iade yönergesini kullanmaya teşvik eder. Yeniden yazma isteği bu sunucu için değil, yine de bu sunucu bloğunda işlenir. Böylece, tüm işlemler durdurulduğundan ve hemen bir yanıt gönderildiği için yönlendirmeler bir dönüş yönergesi ile doğru şekilde yapılır. NGINX, burada yeniden yönlendirme için yeniden yazmayı önermez: http://nginx.org/en/docs/http/converting_rewrite_rules.html

Dönüş yönergesinin sözdizimi: dönüş kodu URL'si; Başlangıçta kalıcı bir yeniden yazma işlemi yaptığınız için, buna yanıt vermek için kod olarak 301'i kullanabilirsiniz, bu da kalıcı bir yönlendirme olduğunu gösterir. Https adresiniz url bölümüne iletilecek. Referans: http://nginx.org/en/docs/http/ngx_http_rewrite_module.html#return

Böylece doğru yapılandırmanız

server {
listen      80;
server_name *.mydomain.com;

#Redirect all nonssl requests to ssl.
return 301 https://$server_name$request_uri;
}

Bu muhtemelen bir joker sunucu bloğu ile SSL alanınıza doğru bir şekilde yönlendirmenize izin verir. Yukarıdaki açıklamada önerildiği gibi alt çizgi genel sunucu adını '_' veya $ ana bilgisayarını da deneyebilirsiniz. Bilmemize izin ver!


Kullanım returngenellikle daha iyi olsa da , yönlendirme için yine de "* .etkialanim.com" olacak $ server_name kullandığından önerilen yapılandırma doğru değildir. Yukarıdaki açıklamada doğru düzeltme @cjc tarafından zaten belirtilmiştir - $hostyerine kullanılmalıdır $server_name.
Maxim Dounin

Evet kabul edildi. Ah benim dikkat açıklığım soluyor gibi görünüyor!
Apurva Sukant

Yukarıdaki olumsuzluk yerine, ssl yapılandırmanızla performansı önemli ölçüde artıracak bir ipucu sunmama izin verin. Joker karakter sertifikası kullanıyorsanız SSL'yi kurmanın en etkili yolu, 'ssl zımbalama' özelliğini ayarlamaktır Bu, SSL'yi tüm alt etki alanları için varsayılan sunucunuzda bir kez ayarlamanıza olanak tanır ve her alt etki alanı için ayrı ssl kimlik doğrulaması kaydeder. ssl_stapling; çözümleyici 8.8.8.8; ssl_stapling_file /ssl_keys/example.com_staple; ssl_stapling_verify açık; Refference- calomel.org/nginx.html
Apurva Sukant

2
Olmalıreturn 301 https://$host$request_uri;
scarver2

Bağlantı noktası 443'te return 301 https://$server_name$request_uri;https kullanmalarını sağlamak için 80, 8080 VE 8181 numaralı bağlantı noktalarını dinliyorum . Sorun, yeniden yönlendirilen URL'nin hala orijinal bağlantı noktası numarasına sahip olmasıdır. 80 bir sorun değil, ama 8080 şu şekilde çıkıyorhttps://example.com:8080
A.Grandt

-1

Bunun gibi bir şey deneyin:

server {
  listen 80;
  server_name ~^(.*)\.mydomain\.com$;
  set $servername $1;
  rewrite ^(.*)$ https://$servername.mydomain.com/$1;
}

Yakalama, joker sunucu tanımlamak ve adına göre yönlendirmeler yapmaktır.


Aşırı izin veren regex grubu.
Kzqai
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.