Evet, HTTP sunucularına nginx proxy istekleri verebilir ve ardından HTTPS üzerinden istemcilere yanıt verebilirsiniz. Bunu yaparken, nginx <-> proxy connect'ın beklenen saldırganınız kim tarafından koklanmasının muhtemel olmadığından emin olmak isteyeceksiniz. Güvenli yeterince yaklaşımlar olabilir şunlardır:
- aynı ana bilgisayara proxy oluşturma (yaptığınız gibi)
- güvenlik duvarınızın arkasındaki diğer ana bilgisayarlara proxy sunucusu
İnternette başka bir ev sahibine proxy sunucusunun yeterince güvenli olması pek mümkün değildir.
Proxy olarak kullandığınız web sunucusunu kullanarak bir Let's Encrypt sertifikası almanız için talimatlar.
İlk şifrenizi Let's Encrypt'tan istemek
Maddeyi server
alt .well-known
dizinin yerel bir dizinden sunulmasına izin verecek şekilde değiştirin , örneğin:
server {
listen 80;
server_name sub.domain.com www.sub.domain.com;
[…]
location /.well-known {
alias /var/www/sub.domain.com/.well-known;
}
location / {
# proxy commands go here
[…]
}
}
http://sub.domain.com/.well-known
Let's Encrypt sunucularının, karşılaştığı zorlukların cevaplarını arayacağı yerdir.
Daha sonra, certbot istemcisini webroot eklentisini (root olarak) kullanarak Let's Encrypt'tan bir sertifika istemek için kullanabilirsiniz :
certbot certonly --webroot -w /var/www/sub.domain.com/ -d sub.domain.com -d www.sub.domain.com
Anahtarınız, sertifikanız ve sertifika zinciriniz şimdi /etc/letsencrypt/live/sub.domain.com/
Sertifikanızı kullanmak için nginx'i yapılandırma
İlk önce şunun gibi yeni bir sunucu maddesi oluşturun:
server {
listen 443 ssl;
# if you wish, you can use the below line for listen instead
# which enables HTTP/2
# requires nginx version >= 1.9.5
# listen 443 ssl http2;
server_name sub.domain.com www.sub.domain.com;
ssl_certificate /etc/letsencrypt/live/sub.domain.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/sub.domain.com/privkey.pem;
# Turn on OCSP stapling as recommended at
# https://community.letsencrypt.org/t/integration-guide/13123
# requires nginx version >= 1.3.7
ssl_stapling on;
ssl_stapling_verify on;
# Uncomment this line only after testing in browsers,
# as it commits you to continuing to serve your site over HTTPS
# in future
# add_header Strict-Transport-Security "max-age=31536000";
access_log /var/log/nginx/sub.log combined;
# maintain the .well-known directory alias for renewals
location /.well-known {
alias /var/www/sub.domain.com/.well-known;
}
location / {
# proxy commands go here as in your port 80 configuration
[…]
}
}
Nginx'i yeniden yükle:
service nginx reload
HTTPS'nin şu anda çalıştığını https://sub.domain.com
ve https://www.sub.domain.com
tarayıcınızda (ve özellikle desteklemek istediğiniz diğer tarayıcılarda) ziyaret ederek ve sertifika hataları bildirmediklerini kontrol ederek çalıştığını doğrulayın.
Önerilen: ayrıca raymii.org sitesini da gözden geçirin: nginx'te Güçlü SSL Güvenliği
ve SSL Laboratuarlarında yapılandırmanızı test edin .
(Önerilen) HTTP isteklerini HTTPS'ye yönlendir
Sitenizin https://
, URL’nin sürümüyle çalıştığını onayladıktan sonra , bazı kullanıcıların gittikleri için güvensiz içerik http://sub.domain.com
sunmalarına izin vermek yerine , onları sitenin HTTPS sürümüne yönlendirin.
Port 80 server
yan tümcesini tümüyle değiştirin :
server {
listen 80;
server_name sub.domain.com www.sub.domain.com;
rewrite ^ https://$host$request_uri? permanent;
}
Ayrıca, bu satırı bağlantı noktası 443 yapılandırmasında da açmanız gerekir, böylece tarayıcılar sitenin HTTP sürümünü bile denemediğini hatırlar:
add_header Strict-Transport-Security "max-age=31536000";
Sertifikanızı otomatik olarak yenileyin
Bu komutu (root olarak), yeni sertifika kullanarak (mevcut sertifikanızla aynı yola sahip olacak) certbot ve nginx'i yeniden yüklediği bilinen tüm sertifikaları yenilemek için kullanabilirsiniz:
certbot renew --renew-hook "service nginx reload"
certbot yalnızca 60 günden daha eski sertifikaları yenilemeye çalışacaktır, bu nedenle bu komutu çok düzenli olarak ve mümkünse otomatik olarak çalıştırmak güvenlidir (ve önerilir!) . Örneğin, aşağıdaki komutu koyabilirsiniz /etc/crontab
:
# at 4:47am/pm, renew all Let's Encrypt certificates over 60 days old
47 4,16 * * * root certbot renew --quiet --renew-hook "service nginx reload"
Yenilikleri, bir kuru çalıştırmayla test edebilirsiniz; bu, etki alanınızla bağlantı kurmak için gerçek bir test yapmak üzere Let's Encrypt aşamalandırma sunucularıyla iletişim kuracak , ancak elde edilen sertifikaları saklamayacaktır:
certbot --dry-run renew
Veya aşağıdakilerle erken yenilemeye zorlayabilirsiniz:
certbot renew --force-renew --renew-hook "service nginx reload"
Not: Koşuyu istediğiniz kadar kurutabilirsiniz, ancak gerçek yenilemeler Let's Encrypt hız sınırlarına tabidir .