AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 832115
Accepted
Veerendra K
Veerendra K
Asked: 2017-02-13 04:34:36 +0800 CST2017-02-13 04:34:36 +0800 CST 2017-02-13 04:34:36 +0800 CST

Apache 中用于 REST API 的 HTTPS 代理

  • 772

听起来像一个基本问题,但我不知道 apache 配置。任何帮助都会很棒。

由于Open TSDB 不支持 https 发送数据(通过 REST API),我们想在 apache 或“Apache Tomcat”中创建一个 https 代理。例如,本地机器同时具有 TSDB 和 Apahce。apache 应该接受 http 和 https,如果我发送任何到https://<PUBLIC IP>/api/input,它应该转发到TSDB同一台机器(或者TSDB可能在不同的机器上)http。

大图

MY Code<----> https://<PUBLIC IP>/api/input<----代理到---->http://localhost/api/input

上面我提到Apache Tomcat是因为,主要是我们将 Apache Tomcat 用于其他目的,所以,首要任务是 Tomcat(是否可以使用 Tomcat?)。

注意:Apache我知道和之间的区别Apache Tomcat:Apache 是 http Web 服务器只处理 http 流量,tomcat 是用于处理请求的 serverlet 容器(仅适用于 Java)。在构建Tomcat有Apache。(请纠正我,如果我错了)

tomcat apache-2.2 proxy conf
  • 3 3 个回答
  • 16020 Views

3 个回答

  • Voted
  1. Best Answer
    ezra-s
    2017-02-14T00:26:49+08:002017-02-14T00:26:49+08:00

    在 Apache HTTPD 中基本上是这样的:

    <VirtualHost *:80>
    ServerName publicname.example.com
    Redirect / https://publicname.example.com/
    </VirtualHost>
    
    <VirtualHost *:443>
    ServerName publicname.example.com
    SSLEngine on
    SSLCertificateFile /path/to/cert.pem
    SSLCertificateKeyFile /path/to/key.pem
    ErrorLog /path/to/logs/publicaname.example.com-ssl-error.log
    CustomLog /path/to/logs/publicaname.example.com-ssl.log combined
    
    ProxyPass /api/input http://127.0.0.1:8080/api/input
    ProxyPassReverse /api/input http://127.0.0.1:8080/api/input
    </VirtualHost>
    

    注意:您需要先加载mod_proxy和mod_proxy_http模块。

    • 2
  2. Veerendra K
    2017-02-14T03:49:58+08:002017-02-14T03:49:58+08:00

    感谢@ezra-s,我能够发送数据。但是在做的时候,我有点挣扎,所以我只想分享一些信息。

    1.sudo apt-get install -y libapache2-mod-proxy-html libxml2-dev apache2-prefork-dev libxml2-dev

    2.启用模块

    sudo a2enmod proxy proxy_ajp proxy_http rewrite deflate headers proxy_balancer proxy_connect proxy_htm ssl

    3.生成的自签名证书这里是指南

    4.添加配置到/etc/apache2/sites-enabled/000-default.conf

    5.我尝试重新启动sudo service apache2 restart。但我得到了错误

     * Starting web server apache2                                                                                                                  * 
     * The apache2 configtest failed.
    Output of config test was:
    [Mon Feb 13 02:31:06.772053 2017] [proxy_html:notice] [pid 8060] AH01425: I18n support in mod_proxy_html requires mod_xml2enc. Without it, non-ASCII characters in proxied pages are likely to display incorrectly.
    AH00526: Syntax error on line 39 of /etc/apache2/sites-enabled/000-default.conf:
    ProxyPass Unable to parse URL
    Action 'configtest' failed.
    The Apache error log may have more information.
    

    经过长时间的互联网搜索,我发现了 mod_xml2enc 不可用的错误。所以,我从源代码构建了这个模块

    sudo apt-get install apache2-prefork-dev libxml2 libxml2-dev
    mkdir ~/modbuild/ && cd ~/modbuild/
    wget http://apache.webthing.com/svn/apache/filters/mod_xml2enc.c
    wget http://apache.webthing.com/svn/apache/filters/mod_xml2enc.h
    sudo apxs2 -aic -I/usr/include/libxml2 ./mod_xml2enc.c
    cd ~
    rm -rfd ~/modbuild/
    sudo service apache2 restart
     * Restarting web server apache2                                                                                                               AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.0.1. Set the 'ServerName' directive globally to suppress this message
                                                                                                                                            [ OK ]
    

    谢谢您的帮助!

    • 1
  3. Věroš K.
    2017-02-13T05:02:00+08:002017-02-13T05:02:00+08:00

    有很多方法可以达到你想要的结果。

    让你的 Tomcat 监听 127.0.0.1:8080 并在它之前设置一些前端服务器。您的前端服务器将侦听 *:80 和 *:443 并将所有请求转发到隐藏的 Tomcat。

    有很多前端服务器。它可以是 Apache(如您提供的那样)、nginx(消耗更少的内存)或 haproxy(提供出色的统计数据以及几乎恒定的内存占用)。

    一种可能的 nginx 配置片段可以是:

    server {
        listen 443 ssl;
    
        server_name your.hostname.com; 
        access_log  .../access_log main;
        error_log .../error_log;
    
        ssl_certificate      /.../fullchain.pem;
        ssl_certificate_key  /.../key.pem;
    
        # some TLS config should be here
    
        # forward all requests to Tomcat 8080
        location / {
          proxy_pass      http://127.0.0.1:8080/;
          client_max_body_size    128m;  # limit POST size
        }
    }
    
    server {
        listen 80;
        server_name your.hostname.com; 
    
        access_log  /.../80-access_log main;
        error_log /.../80-error_log;
    
        location / {
            # redirect everython to HTTPS
            return 301 https://$host$request_uri;
        }
    }
    

    对于生成 TLS 配置,我推荐Mozilla SSL 配置生成器

    • 0

相关问题

  • jvm性能调优技巧/资源?

  • 使 Jakarta 连接器与 IIS 一起工作时出现问题

  • 如何禁用tomcat缓存?我遇到了奇怪的静态文件问题

  • Hudson 无法在 tomcat5 中启动

  • Tomcat 6 HTTP 日志滚动和清除

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve