217
مشکل اصلی:
پیکربندی فعلی Caddy فقط برای فایلهای استاتیک کار میکند، اما برای پروژههای داتنت کور که نیاز به سرور برنامه دارند، مناسب نیست. نیاز به تنظیم Caddy به عنوان پروکسی معکوس داریم.راهحل کامل
پیکربندی Caddyfile/etc/caddy/Caddyfile
devexedge.com {
reverse_proxy http://localhost:5000 {
header_up X-Forwarded-Proto {scheme}
header_up X-Forwarded-For {remote}
header_up Host {host}
transport http {
keepalive 30s
keepalive_idle_conns 100
websocket
}
}
handle_path /static/* {
root * /var/www/devexedge.com/wwwroot
file_server
}
encode gzip zstd
header {
X-Content-Type-Options "nosniff"
Referrer-Policy "strict-origin-when-cross-origin"
Permissions-Policy "geolocation=(), camera=()"
}
@postLimit {
path /api/*
method POST
}
limit @postLimit 10r/s
log {
output file /var/log/caddy/devexedge.com.log
format json
}
}
برای ایجاد فایل log و ایجاد فایل دسترسی
sudo touch /var/lib/caddy/modifycompany.com.log
sudo chown caddy:caddy /var/lib/caddy/modifycompany.com.log
برای تست فرمت درست فایل caddy
sudo caddy validate --config /etc/caddy/Caddyfile
فایل سرویس systemd (/etc/systemd/system/devexedge.service):
[Unit]
Description=DevexEdge .NET Service
After=network.target
[Service]
WorkingDirectory=/var/www/devexedge.com
ExecStart=/usr/bin/dotnet /var/www/devexedge.com/YourApp.dll
Restart=always
RestartSec=10
User=www-data
Environment=ASPNETCORE_ENVIRONMENT=Production
Environment=DOTNET_PRINT_TELEMETRY_MESSAGE=false
Environment=ASPNETCORE_URLS=http://localhost:5000
Environment=ASPNETCORE_FORWARDEDHEADERS_ENABLED=true
LimitNOFILE=65536
LimitCORE=infinity
[Install]
WantedBy=multi-user.target
نکات مهم پیادهسازی:
-
فایل
YourApp.dll
را با نام فایل DLL اصلی اپلیکیشن خود جایگزین کنید -
مسیر
/var/www/devexedge.com
باید به مسیر واقعی اپلیکیشن شما اشاره کند -
برای اعمال تغییرات پس از ویرایش فایلها، دستورات زیر را اجرا کنید:
sudo systemctl daemon-reload
sudo systemctl enable devexedge.service
sudo systemctl start devexedge.service
sudo systemctl restart caddy
مراحل پیادهسازی
- فایل Caddyfile را با محتوای ارائه شده جایگزین کنید
- فایل سرویس systemd را ایجاد کرده و تنظیمات مربوط به اپلیکیشن خود را اعمال کنید
- دسترسیهای لازم را تنظیم کنید:
sudo chown -R www-data:www-data /var/www/devexedge.com
4- سرویسها را فعال و راهاندازی کنید:
sudo systemctl daemon-reload
sudo systemctl enable devexedge.service
sudo systemctl start devexedge.service
sudo systemctl restart caddy
5- افزودن کد پروکسی در .NET Core (Program.cs):
builder.Services.Configure<ForwardedHeadersOptions>(options => {
options.ForwardedHeaders = ForwardedHeaders.XForwardedFor |
ForwardedHeaders.XForwardedProto;
});
app.UseForwardedHeaders();
6- بررسی تنظیمات:
sudo systemctl status devexedge.service
sudo systemctl status caddy
journalctl -u devexedge.service -f
این پیکربندی:
-
ترافیک را به اپلیکیشن داتنت روی پورت 5000 هدایت میکند
-
از WebSocket پشتیبانی میکند
-
فایلهای استاتیک را بهینه سرویس میدهد
-
امنیت را با هدرهای مناسب افزایش میدهد
-
در برابر حملات DOS از API محافظت میکند
-
لاگهای ساختار یافته تولید میکند