使用 nginx 和 tomcat 进行负载平衡

使用 nginx 和 tomcat 进行负载平衡

您好,对于任何系统管理员来说,这个问题都应该很容易回答,问题是我不是服务器管理员,但我必须完成这项任务,我已经很接近了,但仍然没有做到。我的意思是,我在machine1和上运行了两个 tomcat 实例machine2。人们通常通过访问网址来访问它们:

http://machine1:8080/appName
http://machine2:9090/appName

问题是当我使用域名设置 nginx 时domain.com,nginx 会将请求发送到http://machine1:8080/http://machine2:9090/不是http://machine1:8080/http://machine2:9090/appName

这是我的配置(非常基础,可以看出):

upstream backend {
  server machine1:8080;
  server machine2:9090;
}

server {

  listen 80;

  server_name www.mydomain.com mydomain.com;

  location / {

    # needed to forward user's IP address to rails
    proxy_set_header  X-Real-IP  $remote_addr;

    # needed for HTTPS
    proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Host $http_host;
    proxy_redirect off;
    proxy_max_temp_file_size 0;

    proxy_pass http://backend;

  } #end location

} #end server

我必须做哪些改变才能做到以下几点: - 当用户访问时-mydomain.com 将他转移到machine1:8080/appNamemachine2:9090

谢谢

问题更新:

我觉得对于像我这样的初学者来说这很复杂。我将只使用一个实例服务器而不是两个,这是我的配置:

server {

  listen 80;

  server_name www.mydomain.com mydomain.com;
  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://localhost:8080;
    }

}

问题 :

当我访问时,mydomain.com我得到了那个著名的 tomcat 页面If you're seeing this page via a web browser, it means you've setup Tomcat successfully. Congratulations!

如果我手动前往,mydomain.com/myApp那么一切都会按预期进行。

问题 :

有没有办法让我配置它以执行以下操作:

当我在地址栏中输入时mydomain.com,我被转到mydomain.com/myApp

或者说我完全错了。有更简单的方法吗?

更新二:

当我将配置更改为:

proxy_pass http://localhost:8080/appName/;

该网站看上去可以运行,但实际上却不行。链接不起作用,css/js 无法加载。

答案1

根据您的问题,我不清楚哪台机器(或两台机器)的目标网址中包含“appname”。假设您的目标是:

http://machine1:8080/appName
http://machine2:9090/appName

我只是在这里尝试一下,但我会尝试将“/appName”添加到上游块或代理传递线:

upstream backend {
  server machine1:8080/appName;
  server machine2:9090/appName;
}

或者

location / {
    ...
    proxy_pass http://backend/appName;
} #end location

可以找到 proxy_pass 指令的文档这里

答案2

您只需要一个 HTTP 302(重定向)。

rewrite ^/*$ https://www.example.com/appName/ redirect;

正则表达式将捕获https://www.example.comhttps://www.example.com/https://www.example.com///新的 URL 将显示给浏览器用户。

我知道这个答案晚了大约 5 年,但是这个帖子被顶了,我看到“互联网上有人错了”。

相关内容