Nginx 提供静态文件并代理到后端服务器
Nginx to serve static files and also proxy to backend server
我正在使用 nginx 来提供静态文件,并且还代理到后端 java 服务器。我在后端 java 服务器中使用模板语言,最终将替换所有 html 文件。
我不了解 nginx,所以我想就最有效的方法寻求帮助。
文件:
/assets // Lots more files in this folder
/index.html
/android-chrome-192x192.png
/android-chrome-512x512.png
/apple-touch-icon.png
/browserconfig.xml
/favicon.ico
/favicon-16x16.ico
/favicon-32x32.ico
/mstile-15x150.png
/safari-pinned-tab.svg
/site.webmanifest
到目前为止,这是我的配置文件。我提供静态文件,但不代理:
server {
listen 80 default_server;
listen [::]:80 default_server;
root /root/web;
index index.html;
server_name _;
location /assets/ {
try_files $uri =404;
sendfile on;
sendfile_max_chunk 512k;
}
location / {
try_files $uri =404;
sendfile on;
sendfile_max_chunk 512k;
}
location ~* \.(jpg|jpeg|png|gif|ico|webp|mp4)$ {
expires 30d;
}
location ~* \.(css|js)$ {
expires 10d;
}
gzip on;
gzip_vary on;
gzip_comp_level 4;
gzip_min_length 256;
gzip_proxied any;
gzip_types application/javascript application/json application/x-font-ttf font/opentype image/* text/plain text/css text/xml text/javascript application/x-javascript application/xml;
gzip_disable "MSIE [1-6]\.";
gunzip on;
# error_log /root/nginx-log.txt debug;
}
我的后端服务器将提供具有如下模式的 url:
/basic-url-here // This style will serve html files built with a templating language from the server, so they need to be at the root path
/api/*
使用 nginx 服务所有这些文件同时代理到后端服务器的正确/有效方法是什么?
您可以使用另一个位置块来映射您的 api,也就是说,您的 Java 后端服务器将 运行 端口 4000:
location /api/ {
proxy_pass http://localhost:4000:
..... <other configurations>
}
您可以阅读有关此内容以及其他配置的更多信息in the documentation。
希望对您有所帮助!
我找到了一个可行的解决方案,但我不知道它的效率如何。如果我删除 /asset
位置块,并用这个替换 /
位置块,它会起作用:
location / {
try_files $uri $uri/ @backend;
}
location @backend {
proxy_pass http://backend:8080;
}
这是我的最终文件:
server {
listen 80 default_server;
listen [::]:80 default_server;
root /root/web;
index index.html;
server_name _;
access_log off;
sendfile on;
sendfile_max_chunk 512k;
location / {
try_files $uri $uri/ @backend;
}
location @backend {
proxy_pass http://backend:8080;
}
location ~* \.(jpg|jpeg|png|gif|ico|webp|mp4)$ {
expires 30d;
}
location ~* \.(css|js)$ {
expires 10d;
}
gzip on;
gzip_vary on;
gzip_comp_level 4;
gzip_min_length 256;
gzip_proxied any;
gzip_types application/javascript application/json application/x-font-ttf font/opentype image/* text/plain text/css text/xml text/javascript application/x-javascript application/xml;
gzip_disable "MSIE [1-6]\.";
gunzip on;
# error_log /root/nginx-log.txt debug;
}
不过我不确定这是否是正确的方法。
我正在使用 nginx 来提供静态文件,并且还代理到后端 java 服务器。我在后端 java 服务器中使用模板语言,最终将替换所有 html 文件。
我不了解 nginx,所以我想就最有效的方法寻求帮助。
文件:
/assets // Lots more files in this folder
/index.html
/android-chrome-192x192.png
/android-chrome-512x512.png
/apple-touch-icon.png
/browserconfig.xml
/favicon.ico
/favicon-16x16.ico
/favicon-32x32.ico
/mstile-15x150.png
/safari-pinned-tab.svg
/site.webmanifest
到目前为止,这是我的配置文件。我提供静态文件,但不代理:
server {
listen 80 default_server;
listen [::]:80 default_server;
root /root/web;
index index.html;
server_name _;
location /assets/ {
try_files $uri =404;
sendfile on;
sendfile_max_chunk 512k;
}
location / {
try_files $uri =404;
sendfile on;
sendfile_max_chunk 512k;
}
location ~* \.(jpg|jpeg|png|gif|ico|webp|mp4)$ {
expires 30d;
}
location ~* \.(css|js)$ {
expires 10d;
}
gzip on;
gzip_vary on;
gzip_comp_level 4;
gzip_min_length 256;
gzip_proxied any;
gzip_types application/javascript application/json application/x-font-ttf font/opentype image/* text/plain text/css text/xml text/javascript application/x-javascript application/xml;
gzip_disable "MSIE [1-6]\.";
gunzip on;
# error_log /root/nginx-log.txt debug;
}
我的后端服务器将提供具有如下模式的 url:
/basic-url-here // This style will serve html files built with a templating language from the server, so they need to be at the root path
/api/*
使用 nginx 服务所有这些文件同时代理到后端服务器的正确/有效方法是什么?
您可以使用另一个位置块来映射您的 api,也就是说,您的 Java 后端服务器将 运行 端口 4000:
location /api/ {
proxy_pass http://localhost:4000:
..... <other configurations>
}
您可以阅读有关此内容以及其他配置的更多信息in the documentation。
希望对您有所帮助!
我找到了一个可行的解决方案,但我不知道它的效率如何。如果我删除 /asset
位置块,并用这个替换 /
位置块,它会起作用:
location / {
try_files $uri $uri/ @backend;
}
location @backend {
proxy_pass http://backend:8080;
}
这是我的最终文件:
server {
listen 80 default_server;
listen [::]:80 default_server;
root /root/web;
index index.html;
server_name _;
access_log off;
sendfile on;
sendfile_max_chunk 512k;
location / {
try_files $uri $uri/ @backend;
}
location @backend {
proxy_pass http://backend:8080;
}
location ~* \.(jpg|jpeg|png|gif|ico|webp|mp4)$ {
expires 30d;
}
location ~* \.(css|js)$ {
expires 10d;
}
gzip on;
gzip_vary on;
gzip_comp_level 4;
gzip_min_length 256;
gzip_proxied any;
gzip_types application/javascript application/json application/x-font-ttf font/opentype image/* text/plain text/css text/xml text/javascript application/x-javascript application/xml;
gzip_disable "MSIE [1-6]\.";
gunzip on;
# error_log /root/nginx-log.txt debug;
}
不过我不确定这是否是正确的方法。