Nginx可以通過以下幾種方法實現動靜分離:
location
指令來根據文件類型進行分離。例如,可以將靜態文件的請求(如圖片、CSS、JS)轉發到一個靜態文件服務器,而其他動態請求則轉發到應用服務器。示例配置如下:server {
listen 80;
server_name example.com;
location /static {
alias /path/to/static/files;
}
location / {
proxy_pass http://backend;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
location ~* \.(jpg|jpeg|png|gif|css|js)$ {
expires 1y;
access_log off;
root /path/to/static/files;
}
location ~ \.php$ {
proxy_pass http://backend;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
/static/
開頭的URL請求轉發到靜態文件服務器,而其他請求則轉發到應用服務器。示例配置如下:server {
listen 80;
server_name example.com;
location /static {
proxy_pass http://static_server;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
location / {
proxy_pass http://backend;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
http {
proxy_cache_path /path/to/cache levels=1:2 keys_zone=my_cache:10m max_size=10g inactive=60m;
server {
listen 80;
server_name example.com;
location /static {
proxy_cache my_cache;
proxy_cache_valid 200 1d;
proxy_cache_use_stale error timeout updating http_500 http_503 http_504;
proxy_ignore_headers Set-Cookie;
proxy_hide_header Set-Cookie;
proxy_pass http://backend;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
location / {
proxy_pass http://backend;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
}
上述配置中,proxy_cache_path
指定了緩存存儲路徑和相關配置,proxy_cache
指定了使用的緩存區域,proxy_cache_valid
指定了緩存的有效期,proxy_cache_use_stale
指定了在緩存失效時的行為,proxy_ignore_headers
和proxy_hide_header
用于處理緩存相關的響應頭。