ساختار فایل
directiveها در contextهای اصلی قرار میگیرند.
events { worker_connections 1024;}http { include mime.types; server { listen 80; server_name example.com; }}
نکات پایه پیکربندی وبسرور، TLS، proxy و انتشار ایمن سرویس. پیکربندی Nginx از contextهای تودرتو ساخته میشود. برای هر hostname، server block و مسیرهای موردنیاز را صریح تعریف کنید. ترتیب و نوع تطبیق location بر انتخاب handler اثر میگذارد. پیش از redirect عمومی یا rewrite، مسیرهای خاص را جداگانه آزمایش کنید. از این صفحه بهعنوان مرجع سریع استفاده کنید و مثالها و نکتهها را با نسخهٔ ابزار، نیاز و شرایط واقعی پروژهٔ خود تطبیق دهید.
directiveها در contextهای اصلی قرار میگیرند.
events { worker_connections 1024;}http { include mime.types; server { listen 80; server_name example.com; }}host و ریشهٔ فایلها را مشخص کنید؛ از root کنترلشده استفاده کنید.
server { listen 80; server_name example.com www.example.com; root /srv/www/example; index index.html;}مسیر فایل استاتیک را به دایرکتوری محدود و fallback را روشن تعریف کنید.
location /assets/ { root /srv/www/example; try_files $uri =404;}برای برنامهٔ تکصفحهای fallback را فقط در location مناسب قرار دهید.
location / { try_files $uri $uri/ /index.html;}برای فایل استاتیک missing، خطای 404 روشن برگردانید.
location /images/ { try_files $uri =404;}redirect را فقط وقتی مقصد نهایی و دائمی است اعمال کنید.
server { listen 80; server_name old.example.com; return 301 https://example.com$request_uri;}هدرهای host و forwarding را برای سرویس داخلی تنظیم کنید.
location / { proxy_pass http://127.0.0.1:3000; 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;}مقصدهای backend را در upstream جدا ثبت کنید.
upstream app_backend { server 127.0.0.1:3000; server 127.0.0.1:3001;}server { location / { proxy_pass http://app_backend; }}timeoutها را بر اساس SLA و نوع endpoint تنظیم کنید.
location /api/ { proxy_connect_timeout 5s; proxy_read_timeout 30s; proxy_send_timeout 30s; proxy_pass http://app_backend;}مسیر certificate و private key را از محل امن و قابلدسترسی به Nginx بدهید.
server { listen 443 ssl; server_name example.com; ssl_certificate /etc/ssl/example/fullchain.pem; ssl_certificate_key /etc/ssl/example/private.key;}logها را نگهداری و از قرارگرفتن دادهٔ حساس در URL یا log جلوگیری کنید.
access_log /var/log/nginx/example.access.log;error_log /var/log/nginx/example.error.log warn;ابتدا syntax را تست کنید؛ سپس با روش مدیریت سرویس محیط reload کنید.
nginx -tnginx -s reloadserver block را با server_name و مسیرهای صریح برای هر host تنظیم کنید.
در reverse proxy، proxy_pass را به upstream داخلی و کنترلشده محدود کنید.
هدرهای Host و X-Forwarded-* را متناسب با معماری منتقل کنید.
TLS را با گواهی معتبر فعال و تمدید آن را پایش کنید.
اندازه بدنه، timeout و buffer را با نیاز واقعی endpoint تنظیم کنید.
فایلهای استاتیک را با cache مناسب ارائه دهید و محتوای خصوصی را cache نکنید.
پیش از reload، پیکربندی را با nginx -t اعتبارسنجی کنید.
log دسترسی و خطا را ذخیره کنید و از ثبت اطلاعات حساس در URL پرهیز کنید.
بهروزرسانی امنیتی و نسخهٔ ماژولها را از منبع معتبر انجام دهید.
پس از تغییر، پاسخ، redirect، TLS و رفتار upstream را آزمایش کنید.
برای headerهای forwarding فقط به proxyهای مورداعتماد تکیه کنید و مقدار ورودی کاربر را بهعنوان IP معتبر نپذیرید.
برای هر host، default server و مسیرهای حساس را صریح تنظیم کنید تا درخواست ناشناخته به سایت اشتباه نرسد.