您好,对于任何系统管理员来说,这个问题都应该很容易回答,问题是我不是服务器管理员,但我必须完成这项任务,我已经很接近了,但仍然没有做到。我的意思是,我在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/appName
machine2: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.com
和https://www.example.com/
。https://www.example.com///
新的 URL 将显示给浏览器用户。
我知道这个答案晚了大约 5 年,但是这个帖子被顶了,我看到“互联网上有人错了”。