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

将子域重定向到端口[nginx/flask],nginx,Nginx,我知道这是一个常见的问题,也有相同的答案,但我问这个问题的原因是因为我不知道如何解决这个问题。根据我决定的方式,我可以选择更改的解决方案。不管怎样 我有一个AWS EC2实例。我的DNS由Route53处理,我拥有example.com。目前,在我的实例上,有两个服务正在运行: example.com:80 [nginx/php/wordpress] example.com:8142 [flask] 我想做的是,让app.example.com指向example.com:8142。我该怎么做呢

我知道这是一个常见的问题,也有相同的答案,但我问这个问题的原因是因为我不知道如何解决这个问题。根据我决定的方式,我可以选择更改的解决方案。不管怎样

我有一个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


是否有更好的方法可以解决此问题?

您可以为app.example.com添加一个虚拟主机,该主机侦听端口80,然后代理将所有请求传递给flask:

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

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

这就是使用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>
$cat/etc/apache2/sites available/app.conf
ServerName app.example.com
代理主机
命令允许,拒绝
通融
ProxyPass/http://localhost:8142/
ProxyPassReverse/http://localhost:8142/

您可以将域重定向到某个端口。这取决于您使用的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文件,我建议您阅读以下教程

我有ubuntu 16和nginx,其中有两个NodeJS实例,一个用于front,一个用于admin。 在这方面,我有: /etc/nginx/可用站点/默认

我补充说:

服务器{ ... 地点/{ 代理通行证 }

}


我用它来访问管理员。

我试图弄清楚如何在Apache中实现这一点,但没有用。对我来说(在Digital Ocean上)创建一个新的droplet、安装LEMP堆栈、配置服务器、克隆我的应用程序并编写这7行代码比我在Apache上花费的所有时间都要快。非常感谢你@ColeTierney如何在使用proxy_pass时将子域(app.)传递给flask?@AliKhosro您可以尝试添加自定义头:
proxy_set_header X-子域app
您能告诉我应该将设置添加到哪个文件吗?@user1024,通常可以在这里找到:/etc/nginx/nginx.conf。通常,该配置文件将包括其他文件,这些文件可能是设置的更好位置。取决于设置。您也可以将自己的include语句添加到nginx.conf中,并将文件放入/etc/nginx中。Nginx将在那里查找包含的文件。
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;
}
...