首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >使用apache将指定HTTPS请求重定向到特定端口

使用apache将指定HTTPS请求重定向到特定端口
EN

Stack Overflow用户
提问于 2018-05-31 16:17:45
回答 2查看 2.2K关注 0票数 1

我在将一些请求重定向到其他端口时遇到了问题。下面是我的配置:

  • 我有一个像XXXX.ddns.net
  • 这样的公共域我有一台安装了apache的Rapsbian服务器,我的/var/www文件夹中的文件都得到了正确的服务(angular网站)
  • 在同一台Raspbian服务器上有一台REST服务器在3000端口上运行
  • 这是在带Raspbian的HTTPS上运行的

我希望所有发送到XXXX.ddns.net/api/*的请求都被重定向到3000端口。

我更改了.htaccess文件,重写规则似乎可以在本地运行,但我不能在我的网站上运行。API请求实现时出现错误500。

这是我当前的.htaccess文件:

代码语言:javascript
复制
RewriteEngine On
RewriteRule ^api/(.*)      https://localhost:3000/api/$1 [QSA]
# not sure if it should be http or https in the rule but nothing works
#RewriteRule ^api/(.*)      http://localhost:3000/api/$1 [QSA]

# If an existing asset or directory is requested go to it as it is
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} -f [OR]
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} -d
RewriteRule ^ - [L]

# If the requested pattern is file and file doesn't exist, send 404
RewriteCond %{REQUEST_URI} ^(\/[a-z_\-\s0-9\.]+)+\.[a-zA-Z]{2,4}$
RewriteRule ^ - [L,R=404]

下面是我当前的000-default-le-ssl.conf文件(在/etc/apache2/sites available中):

代码语言:javascript
复制
<IfModule mod_ssl.c>
<VirtualHost *:443>

    ServerAdmin webmaster@localhost
    DocumentRoot /var/www/html

ServerName XXXX.ddns.net
SSLCertificateFile /etc/letsencrypt/live/XXXX.ddns.net/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/XXXX.ddns.net/privkey.pem
Include /etc/letsencrypt/options-ssl-apache.conf
<Location /api>
        ProxyPass http://127.0.0.1:3000/api
        ProxyPassReverse http://127.0.0.1:3000/api
</Location>

</VirtualHost>
</IfModule>

如果有人能帮我实现它..。谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-06-04 03:16:09

谢谢你的帮助。我真的不知道它是如何工作的,但现在它可以工作了!我不记得我到底做了什么,但最后一次是像这样修改我的000-default-le-ssl.conf文件:

代码语言:javascript
复制
SSLProxyEngine On
SSLProxyVerify none 
SSLProxyCheckPeerCN off
SSLProxyCheckPeerName off
SSLProxyCheckPeerExpire off
<Location /api>
    ProxyPass http://127.0.0.1:3000/api/
    ProxyPassReverse http://127.0.0.1:3000/api/
    ProxyPass https://127.0.0.1:3000/api/
    ProxyPassReverse https://127.0.0.1:3000/api/
</Location>
票数 0
EN

Stack Overflow用户

发布于 2018-06-05 21:48:06

你自己找到的解决方案在我看来很奇怪。您打开SSLProxyEngine,然后禁用所有安全措施。后端API是否在端口3000同时运行HTTPS和HTTP?这是不可能的。

我经常使用这个设置(apache作为后端应用程序的代理),并建议使用以下配置:

因为我不理解重写指令的目的,所以我省略了它们。端口80上的VirtualHost总是将HTTP请求重定向到HTTPS。如果这样可以将permanent添加到指令中(某些浏览器会缓存永久,请参阅VirtualHost *:80中的注释)。

HTTPS的VirtualHost提供来自/var/www/html的DocumentRoot的内容。Directory指令负责只为正确寻址的文件提供服务(不可能进行查找)。VirtualHost还为同一台服务器上的端口3000上的/api提供代理。

如果你的letsencrypt配置是正确的(填写XXXX),它应该适用于Apache2.4。这两个站点配置都可以写入到单个文件中,该文件通常位于/etc/apache2/ VirtualHost -可通过一个指向启用/etc/apache2/site的符号链接获得。在测试此配置之前,请删除/重命名.htaccess文件和其他配置。如果您需要通过apache进行访问控制,也可以直接在VirtualHost配置中进行配置。

代码语言:javascript
复制
<VirtualHost *:80>
    ServerName XXXX.ddns.net
    # Always https
    Redirect / https://XXXX.ddns.net/
#    Redirect permanent / https://XXXX.ddns.net/
</VirtualHost>

<VirtualHost *:443>
    ServerAdmin webmaster@localhost
    ServerName XXXX.ddns.net
    # These are your SSL settings; your responsibility
    SSLCertificateFile /etc/letsencrypt/live/XXXX.ddns.net/fullchain.pem
    SSLCertificateKeyFile /etc/letsencrypt/live/XXXX.ddns.net/privkey.pem
    Include /etc/letsencrypt/options-ssl-apache.conf

    # Your document root; where the JavaScript application lives
    DocumentRoot /var/www/html
    <Directory /var/www/html/ >
        Options -Indexes +FollowSymLinks -MultiViews
        AllowOverride None
        Order Allow,Deny 
        Allow From All
    </Directory>

    # Reverse proxy settings for api
    ProxyRequests     Off
    ProxyPreserveHost On
    <Location /api >
        ProxyPass        http://127.0.0.1:3000/api
        ProxyPassReverse http://127.0.0.1:3000/api
    </Location>
</VirtualHost>
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50619739

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档