根据URL重定向到端口号

时间:2019-05-23 15:40:17

标签: node.js apache http gitlab

我的服务器有3个网站:

  • 在Omnibus端口80上运行的Gitlab
  • Docker在端口3001上的React.js应用程序
  • 端口8008上Apache上的Jorani(PHP应用程序)

由于DNS无法处理端口号,因此如何根据用户提供的URL重定向到端口,例如:

我看到了一些有关代理或反向代理的帖子,但是我不确定这是否是进行下一步的好方法

2 个答案:

答案 0 :(得分:0)

在可公开访问的Internet中,HTTP流量应通过端口80(或通过HTTPS在端口443上运行的TLS)。从理论上讲,您可以在任何端口上使用HTTP,但这很容易出错,并且并非所有的机器都支持,因此不建议在生产中使用。因此,您不应将流量从subdomain.domain.extension重定向到domain.extension:port

相反,您有两种解决方案:

这三台服务器在三个IP后面运行:每个子域都有一个IP地址。每个服务器都在其自己的IP之后运行。您的DNS服务器应该为每个域名-IP地址关联发送记录。

反向代理:每个子域都使用相同的IP。该IP的后面运行着第四个服务器-代理。它的简单任务是查看路径中的子域,并将HTTP(S)通信重新路由到与其连接的相应应用程序(gitlab,react或jorani)。请注意,这三个应用程序均无法从公共互联网直接访问。

答案 1 :(得分:0)

这是我正在使用的解决方案:

我将gitlab端口更改为8900。 我将Apache端口更改为80。

我现在将虚拟主机与Apache配合使用:

对于/ etc / httpd / sites-available /

中的CentOS 7

gitlab.conf:

<VirtualHost gitlab.mydomain.intra:80 >
        ServerName gitlab.mydomain.intra
        ProxyPreserveHost On
        ProxyRequests On
        ProxyPass / http://localhost:8900/
        ProxyPassReverse / http://localhost:8900/
</VirtualHost>

react.conf:

<VirtualHost react.mydomain.intra:80 >
        ServerName react.mydomain.intra
        ProxyPreserveHost On
        ProxyRequests On
        ProxyPass / http://localhost:3001/
        ProxyPassReverse / http://localhost:3001/
</VirtualHost>

jorani.conf:

<VirtualHost jorani.mydomain.intra:80 >
        ServerName jorani.mydomain.intra
        ProxyPreserveHost On
        ProxyRequests On
        ProxyPass / http://localhost:80/jorani
        ProxyPassReverse / http://localhost:80/jorani
</VirtualHost>

问题:我无法通过SSL(gitlab.mydomain.intra => https://gitlab.mydomain.intra/)使它适用于gitlab。找到解决方案后,就会发布解决方案。

编辑: 这是使用https的gitlab的解决方案:

/etc/gitlab/gitlab.rb:

external_url 'https://gitlab.mydomain.com/'
nginx['enable'] = true
nginx['redirect_http_to_https'] = true
nginx['listen_addresses'] = ['localhost']
nginx['listen_port'] = 8888
nginx['listen_https'] = false

/etc/httpd/sites-available/gitlab.conf

<VirtualHost gitlab.mydomain.intra:80>
    ServerName gitlab.mydomain.intra
    ErrorLog /var/log/httpd/gitlab.mydomain.intra/error.log
    Redirect 301 / https://gitlab.mydomain.intra/
</VirtualHost>
<VirtualHost gitlab.mydomain.intra:443>
    ServerName gitlab.mydomain.intra
    ErrorLog /var/log/httpd/gitlab.mydomain.intra/error.log
    RequestHeader set Host "gitlab.mydomain.intra"
    #RequestHeader add X-Forwarded-Ssl on
    #RequestHeader set X-Forwarded-For %<span class="pl-s1"><span class="pl-pse">{</span>REMOTE_ADDR<span class="pl-$
    #RequestHeader set X-Forwarded-Proto "https"

    ProxyPreserveHost On
    ProxyPass / http://localhost:8888/
    ProxyPassReverse / http://localhost:8888/

    SSLEngine On
    SSLCertificateFile /etc/gitlab/ssl/gitlab.mydomain.intra.crt
    SSLCertificateKeyFile /etc/gitlab/ssl/gitlab.mydomain.intra.key
</VirtualHost>