一、简单配置
配置server,其中反向代理的页面通过upstream进行配置
ser nginx;
worker_processes auto;
error_log /var/log/nginx/error.log notice;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
upstream web {
server xxx.xxx.xxx.xxxx:8081;
}
server {
listen 80;
server_name localhost;
location /tomcat {
proxy_pass http://web/;
}
}
}
到此时,如果只是代理接口即可正常使用。但是如果是代理的页面,会出现css,js等404等问题导致页面功能异常。
二、代理静态文件
server中添加如下location
location ~ .*\.(js|css)?$ {
expires 12h;
proxy_pass http://web;
}
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|svg)?$ {
expires 12h;
proxy_pass http://web;
}
添加静态资源代理后功能正常。附:如果需要代理某个路径下的静态资源,参考:
指定路径下静态资源中的第3节内容。
三、代理多个项目
代理多个项目时候,可以分配到多个端口中。其参考配置如下:
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log notice;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
upstream minio {
server xxx.xxx.xxx:9090;
}
upstream web {
server xxx.xxx.xxx:8081;
}
server {
listen 80;
server_name localhost;
location / {
proxy_pass http://minio;
}
location ~ .*\.(js|css)?$ {
expires off;
proxy_pass http://minio;
}
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|svg)?$ {
expires off;
proxy_pass http://minio;
}
}
server {
listen 8081;
server_name localhost;
location / {
proxy_pass http://web;
}
location ~ .*\.(js|css)?$ {
expires off;
proxy_pass http://web;
}
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|svg)?$ {
expires off;
proxy_pass http://web;
}
}
}
四、注意点
如果按照上述配置仍然无法访问,按照以下几点进行排查:
- 防火墙端口是否开放对应端口,可以使用telnet进行验证
- Nginx如果是用docker启动,需要将多个端口都映射出来,否则对应端口也无法访问,可以在容器外使用lsof -i:port进行验证
docker创建容器时候映射示例(80和8081端口)如下:
docker run \
-p 80:80 \
-p 8081:8081 \
--name nginx \
-v /home/map/nginx/nginx.conf:/etc/nginx/nginx.conf \
-v /home/map/nginx/conf:/etc/nginx/conf.d \
-v /home/map/nginx/log:/var/log/nginx \
-v /home/map/nginx/html:/usr/share/nginx/html \
-d f9c14fe76d50