请考虑以下图表:

我有一个来自数字海洋的Debian液滴,我需要在运行Tomcat实例的单个Docker容器中部署N个Java应用程序。
每个映像具有以下Dockerfile配置:
FROM tomcat:jdk8-openjdk
LABEL maintainer="admin@mail.com"
ADD webapp1.war /usr/local/tomcat/webapps/ #webapp1, webapp2,... webappN
EXPOSE 8080
CMD ["catalina.sh", "run"]它的建造有:
docker build -t webapp1 .
docker build -t webapp2 .
...每个容器都使用以下命令启动:
docker run -it -d -p 8081:8080 webapp1
docker run -it -d -p 8082:8080 webapp2
...每个应用程序工作正常,可通过液滴IP地址、端口和应用程序名称访问:
http://123.123.123.123:8081/webapp1
http://123.123.123.123:8082/webapp2
...但是我需要使用一个域名(目前没有SSL ):
http://example.com/webapp1
http://example.com/webapp2
...因此,我使用Nginx作为反向代理来实现这一点。下面是我使用的sites-available文件夹中的Nginx配置:
default文件:
# Default server configuration
#
server {
listen 80 default_server;
listen [::]:80 default_server;
root /var/www/html;
# Add index.php to the list if you are using PHP
index index.html index.htm index.nginx-debian.html;
server_name _;
location / {
try_files $uri $uri/ =404;
}
}webapp1文件:
# webapp1 configuration
#
server {
listen 80;
server_name example.com;
access_log /var/log/nginx/tomcat-access.log;
error_log /var/log/nginx/tomcat-error.log;
location / {
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://123.123.123.123:8081/;
}
}webapp2文件:
# webapp2 configuration
#
server {
listen 80;
server_name example.com;
access_log /var/log/nginx/tomcat-access.log;
error_log /var/log/nginx/tomcat-error.log;
location / {
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://123.123.123.123:8082/;
}
}问题是,当我部署第一个应用程序并使它可以通过域名(example.com/webapp1)访问时,它运行良好,但是当我试图访问example.com (我的登陆页面)时,产生了一个404错误。我决定稍后解决这个问题,最好尝试部署第二个应用程序。它成功了,webapp2已经成功部署,并且可以通过example.com/webapp2访问,但是现在example.com和example.com/webapp1都出现了一个404错误。
我是Nginx和Docker新手。拜托救救我。
发布于 2021-03-29 05:06:44
在Nginx中,server配置块定义单个名为虚拟主机。如果您为同一个域定义了多个server块,那么日志中应该有一个警告,但是将选择一个server块,其他块将被忽略。
您需要的是多个location块。所以您需要一个sites-available/example.com配置(从sites-enabled/example.com符号链接),如下所示:
server {
listen 80 default_server;
listen [::]:80 default_server;
root /var/www/html;
server_name example.com;
location / {
try_files $uri $uri/ =404;
}
# For each web application
location /webapp1/ {
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_pass http://192.0.2.1:8081;
}
}备注:X-Forwarded-For和X-Forwarded-Proto标题对Tomcat没有影响,除非添加:
到Tomcat 配置。
https://serverfault.com/questions/1058651
复制相似问题