بیشتر اپلیکیشنهای خودمیزبان روی یک پورت محلی مثل 127.0.0.1:3000 گوش میدهند و HTTP ساده صحبت میکنند. یک وسیط معکوس جلو روی پورتهای 80/443 میایستد، HTTPS را با یک گواهی واقعی خاتمه میدهد و ترافیک را به آن پورت محلی هدایت میکند — یک https://app.yourdomain.com تمیز به شما میدهد و اجازه میدهد چند اپلیکیشن پشت یک IP اجرا کنید. اینجا هر دو راه رایج است.
پیشنیازها
- یک دامنه با رکورد A که به IP سرورتان اشاره میکند (منتظر انتشار DNS بمانید).
- پورتهای 80 و 443 باز — چگونه یک فایروال UFW راه بیندازیم را ببینید.
- اپلیکیشن شما بهصورت محلی در حال اجرا، مثلاً روی
127.0.0.1:3000.
گزینه A — Caddy (HTTPS خودکار، یک خط)
sudo apt install -y caddy
echo 'app.yourdomain.com { reverse_proxy 127.0.0.1:3000 }' | sudo tee /etc/caddy/Caddyfile
sudo systemctl restart caddy
همین — Caddy یک گواهی Let's Encrypt برای دامنه میگیرد و آن را خودکار تمدید میکند.
گزینه B — nginx + Certbot
sudo apt install -y nginx certbot python3-certbot-nginx
/etc/nginx/sites-available/app را بسازید:
server {
listen 80;
server_name app.yourdomain.com;
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;
}
}
آن را فعال کنید و HTTPS اضافه کنید:
sudo ln -s /etc/nginx/sites-available/app /etc/nginx/sites-enabled/
sudo nginx -t && sudo systemctl reload nginx
sudo certbot --nginx -d app.yourdomain.com
Certbot پیکربندی را برای سرو HTTPS ویرایش میکند و تمدید خودکار را تنظیم میکند.
هشدارهای صادقانه
- DNS و پورتها شکستهای معمولاند. رکورد A باید به اینجا اشاره کند و منتشر شده باشد، و 80/443 قابل دسترسی باشند، وگرنه صدور گواهی شکست میخورد. هر دو ابزار بهمحض اصلاح، دوباره تلاش میکنند.
- فقط آنچه را قصد داری افشا کن. اپلیکیشن را به
127.0.0.1مقید نگه دار تا فقط از طریق وسیط قابل دسترسی باشد، نه مستقیم. - HTTPS به دامنه نیاز دارد، نه IP خام — Let's Encrypt برای نامها صادر میکند.
گامهای بعدی
وسیط معکوس همان چیزی است که به یک سرور اجازه میدهد چیزهای بسیاری را سرو کند — میزبانی چند سرویس پشت یک IP را ببینید. اپلیکیشن را در یک کانتینر اجرا میکنید؟ با چگونه Docker را نصب کنیم شروع کنید. برای زنده نگه داشتن خود اپلیکیشن در برابر ریاستارتها و کرشها، چگونه یک سرویس systemd بسازیم را ببینید.
نظرات
هنوز نظری نیست. اولین نفر باشید.