على Ubuntu ملف الموقع هنا:
/etc/nginx/sites-available/example.com
غيّر example.com باسم الدومين. الاتنين اللي تحت مش اختيار. الاتنين يتكتبوا في نفس الملف.
/etc/nginx/sites-available/example.com
server { listen 80; listen [::]:80; server_name example.com www.example.com; return 301 https://$host$request_uri;}server { listen 443 ssl; listen [::]:443 ssl; server_name example.com www.example.com; ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem; location / { proxy_pass http://127.0.0.1:7000; proxy_http_version 1.1; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; }}بلوك 80
أي طلب على HTTP يرجع 301 لنفس الرابط على HTTPS.
مثال: http://example.com/users?page=2 يبقى https://example.com/users?page=2.
$host اسم الموقع. $request_uri المسار والاستعلام. التحويل ما يضيّعش الصفحة.
proxy_pass. شغله تحويل بس.
بلوك 443
هنا الشهادة. وهنا التسليم للتطبيق.
listen 443 sslيعني HTTPS على البورت ده. كلمةsslعلى سطرlisten. متكتبشssl on. الأمر ده اتشال.- مسار الشهادة في المثال من Let’s Encrypt. لو المسار عندك مختلف، حط المسار الصح. الملف مش هيشتغل من غير الشهادتين على القرص.
proxy_pass http://127.0.0.1:7000يسلّم جوّه الجهاز. التطبيق في المثال Express على7000. لو بورت التطبيق مختلف، غيّر الرقم.- الهيدرز تخلي التطبيق يعرف الدومين الأصلي، وإن الطلب كان HTTPS.
سطر [::]:80 مع سطر [::]:443 لنسخة IPv6. لو الجهاز من غيرها، السطرين دول مش هيضرّوا على إعداد Ubuntu العادي.
خلّصت الفصل لما
🧠 اختبر نفسك
١) أكتب بلوك 80 ولا بلوك 443؟
الاتنين. في نفس الملف.
٢) ليه بلوك 80 من غير proxy_pass؟
لأنه ما يسلّمش للتطبيق. بيرجع عنوان HTTPS وبس.
٣) proxy_pass على 127.0.0.1:7000 يعني إيه؟
Nginx يكلّم التطبيق من جوّه الجهاز، مش من الإنترنت.