Nginx-Setup SSL
برای راه اندازی سرویس https در Nginx به روش زیر عمل کنید:
نکته: در هرباری که تغییری در تنظیمات انجام میدهید از دستور زیر استفاده نمایید تا مطمئن شوید که تغییرات درست بوده و موجب خطا نمیشود(سرویس را ریست ننمایید و از دستور زیر استفاده نمایید)
nginx -t
در زیر یک نمونه فایل config قبل ازآعمال تغییرات آورده شده تا تغییرات بوضوح مشاهده شود:
server {
listen 80;
server_name minitapp.ir;
server_name www.minitapp.ir;
client_max_body_size 300M;
location / {
proxy_pass http://192.168.2.101:8080/;
proxy_set_header X-Forwarded-Proto https;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For
$proxy_add_x_forwarded_for;
}
}
همچنین بلاک زیر بعد از بروز تغییرات میباشد:
server {
listen 80; # http port
server_name minitapp.ir; # domain
server_name www.minitapp.ir;
client_max_body_size 300M;
return 301 https://$server_name$request_uri; # Redirect to (return301 means redirect)
}
server {
listen 443; # https port
server_name minitapp.ir; # domain
server_name www.minitapp.ir; # domain
client_max_body_size 300M;
ssl on;
ssl_certificate /etc/nginx/sites-cert/minitapp.ir.pem; # Pem(CertificateFile) file
ssl_certificate_key /etc/nginx/sites-cert/minitapp.ir.key; # Key(CertificateFile) file
ssl_session_timeout 5m; # Optional
ssl_protocols TLSv1; # Optional
ssl_ciphers HIGH:!aNULL:!MD5; # Optional
ssl_prefer_server_ciphers on; # Optional
location / {
proxy_pass http://192.168.2.101:8080/;
proxy_set_header X-Forwarded-Proto https;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For
$proxy_add_x_forwarded_for;
}
}
نکته: مسیر زیر یک مسیر دلخواه است که در سرور Nginx است که برای نگهداری فایل های ca در نظر گرفته شده است
/etc/nginx/sites-cert
نکته: return 301 به معنی این است که صفحات را به آدرس مورد نظر منتقل(redirect) کن
نکته: اگر بخواهیم فقط از سرویس https استفاده نماییم باید از داخل بلاک server با پورت 80 تمامی location ها را پاک کرده و به یک بلاک جدید با همان نام server و با شماره 443 (بجای 80) قرار دهیم (توجه شود که هیچ مقداری در location ها تغییر نخواهند کرد)-(توجه شود که directive با عنوان proxy در تگ http مشاهده نشود)
نکته: اگر بخواهیم از هردو پروتکل http و https استفاده نماییم، آنگاه خط return 301 را از محل listen 80 حذف کرده و به بلاک های آن دست نمیزنیم.