如何用 Next.js、.NET Core 和 Nginx 打造一個酷炫的全端專案
嘿!你是不是想打造一個現代又高效的全端應用,但又不想被一堆技術細節搞瘋?這篇文章就是為你而寫!我們將用 Docker 容器,把 Next.js 前端、.NET Core 後端和 Nginx 反向代理打包在一起,實現「一站式」的部署體驗。
快速導覽
Github 專案:https://github.com/greateyin/next-js-dotnet-nginx-all-in-docker
為什麼選這些技術?
技術清單與優勢
技術 | 為什麼選它? |
---|---|
Next.js | Server-Side Rendering(SSR)讓 SEO 友好;開發速度超快! |
.NET Core | 企業級解決方案,性能穩定,支援跨平台。 |
Nginx | 反向代理、快取和負載平衡一把罩。 |
技術架構概覽
這裡是一張簡單的架構圖:
stateDiagram-v2
state "Next.js (3000)" as NextJS
state "Nginx (80)" as Nginx
state ".NET Core API (8080)" as DotNetAPI
[*] --> NextJS
NextJS --> Nginx : 前端請求
Nginx --> DotNetAPI : 代理請求
DotNetAPI --> [*]
快速建置流程
Dockerfile:多階段建置
# 前端建置
FROM node:20.18-slim AS frontend-builder
WORKDIR /frontend
COPY frontend/ ./
RUN npm install && npm run build
# 後端建置
FROM mcr.microsoft.com/dotnet/sdk:8.0 AS backend-builder
WORKDIR /src
COPY backend/ ./
RUN dotnet publish -c Release -o /app/publish
# 運行階段
FROM mcr.microsoft.com/dotnet/aspnet:8.0 AS runner
WORKDIR /app
COPY --from=frontend-builder /frontend/.next ./frontend/.next
COPY --from=backend-builder /app/publish ./backend/
CMD ["/app/start.sh"]
啟動腳本
#!/bin/sh
cd /app/frontend && npm start &
cd /app/backend && dotnet backend.dll &
nginx -g "daemon off;"
效能調校小秘訣
Docker 映像優化
- 多階段建置:減少映像大小,提升建置速度。
- 清理無用的暫存檔:用
rm -rf
移除不必要的檔案。 - 輕量化映像:用
slim
版 Node.js 和 .NET SDK。
Nginx 設定調校
http {
gzip on;
gzip_types text/plain text/css application/json application/javascript;
proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=cache_zone:10m;
server {
location / {
proxy_pass http://frontend:3000;
proxy_cache cache_zone;
}
location /api {
proxy_pass http://backend:8080;
proxy_cache cache_zone;
}
}
}
Nginx 避坑指南
路由配置問題
在後端路由配置中:
location /api/ {
proxy_pass http://127.0.0.1:8080/;
}
這個配置會把 /api/data
轉發為 /data
,但實際應保留 /api
前綴。應修改為:
location /api/ {
proxy_pass http://127.0.0.1:8080;
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;
}
請求頭設定
添加必要的請求頭配置:
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
錯誤處理優化
更詳細的錯誤日誌配置:
error_log /var/log/nginx/error.log warn;
access_log /var/log/nginx/access.log combined;
location = /404.html {
default_type text/html;
return 404 '<html><body><h1>404 Not Found</h1></body></html>';
}
透過以上調整,你的 Nginx 設定將更穩定,並且能有效解決常見的 404 錯誤與請求轉發問題。
用以上方法,打造一個穩定高效的全端應用再也不是夢!