将子域名重定向到端口 [nginx/flask]

51

我知道这是一个常见的问题,并且已经有了答案,但我问这个问题的原因是因为我不知道如何解决。根据我决定的方式,我可以选择不同的解决方案。无论如何,

我拥有一个AWS EC2实例。我的DNS由Route53处理,我拥有example.com。目前,在我的实例上有两个正在运行的服务:

example.com:80 [nginx/php/wordpress]
example.com:8142 [flask]

我想做的是让app.example.com指向example.com:8142。我该怎么做呢?我很确定我需要将app.example.com指向与example.com相同的IP地址,因为它将由同一台服务器提供服务。此外,nginx将首先在端口80处理这些请求。有没有一种方法可以使nginx将所有请求转发到localhost:8142?

还有更好的解决方法吗?

4个回答

98

你可以为 app.example.com 添加一个监听80端口的虚拟主机,然后将所有请求代理转发到 Flask:

server {
    listen 80;
    server_name app.example.com;

    location / {
        proxy_pass http://localhost:8142;
    }   
}

2
我一直在尝试在Apache中解决这个问题,但没有成功。在Digital Ocean上,我创建了一个新的droplet,安装了LEMP堆栈,配置了服务器,克隆了我的应用程序,并编写了这7行代码,这比我浪费在Apache上尝试解决它的所有时间都要快。非常感谢! - Jonathan
1
@AliKhosro 你可以尝试添加自定义头部:proxy_set_header X-Subdomain app; - Cole Tierney
请问我应该将设置添加到哪个文件中? - user1024
@user1024,通常可以在此处找到:/etc/nginx/nginx.conf。通常该配置文件将包括其他文件,这些文件可能是更好的位置来设置您的设置。这取决于设置。您还可以将自己的include语句添加到nginx.conf中,并将文件放置在/etc/nginx中。Nginx将在那里查找已包含的文件。 - Cole Tierney
完成后,“app.example.com”仍然指向“example.com”。这是因为我将“app.example.com”解析为服务器IP吗? - rosefun
显示剩余3条评论

1
你可以将你的域名重定向到特定的端口。这取决于你使用的 Web 服务 -Nginx/Apache。如果你使用 Nginx,你需要在 Nginx 的网站配置中添加一个服务器块。这可以通过使用下面的方法实现。
location /{
    proxy_pass  http://127.0.0.1:8142/;
}

如果你正在使用Apache,有两种选择,第一种是在网站的.htaccess文件中添加重定向规则,第二种是直接在Apache的Vhost文件中进行操作。我喜欢使用第一种选择。在你的.htaccess文件中,你可以添加以下规则。
RewriteEngine on

# redirect to 3000 if current port is not 3000 and "some-prefix/" is matched
RewriteRule ^/(.*[^/])/?$ http://blabla:3000/$1/ [R=301,L]

如果您想使用Apache的Vhost文件,我建议您阅读以下教程link

0

我有一个Ubuntu 16和Nginx,其中包含两个NodeJS实例,一个用于前端,一个用于管理。

在这里,我有:

/etc/nginx/sites-available/default

我添加了以下内容:

server { ... location / { proxy_pass http://127.0.0.1:8001; }

location /admin {
    rewrite ^/admin(.*) /$1 break;
    proxy_pass http://127.0.0.1:8002;
}

location /other {
    rewrite ^/other(.*) /$1 break;
    proxy_pass http://127.0.0.1:8003;
}
...

}

我使用这个来获得管理员权限。


0
这是使用Apache的方法。
$cat /etc/apache2/sites-available/app.conf
<VirtualHost *:80>
    ServerName app.example.com
    ProxyPreserveHost On
    <Proxy *>
        Order allow,deny
        Allow from all
    </Proxy>
    ProxyPass / http://localhost:8142/
    ProxyPassReverse / http://localhost:8142/
</VirtualHost>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接