Proxy HTTPS no apache para a API de descanso

2

Soa como uma pergunta básica, mas eu não sei sobre a configuração do apache. Qualquer ajuda seria ótima.

Como o Open TSDB não suporta https para enviar dados (via API REST), queremos para criar um proxy https no apache ou "Apache Tomcat". Por exemplo, a máquina local possui o TSDB e o Apahce. O apache deve aceitar http e https, se eu enviar algum para https://<PUBLIC IP>/api/input , ele deve encaminhar para TSDB na mesma máquina (Ou TSDB poderia estar em uma máquina diferente) com http .

A grande figura

MY Code < ---- > https://<PUBLIC IP>/api/input < ---- Proxy para ---- > http://localhost/api/input

Acima mencionei Apache Tomcat porque, principalmente, estamos usando o Apache Tomcat para outra finalidade, portanto, a primeira prioridade é o Tomcat (é possível com o Tomcat?).

OBSERVAÇÃO: eu sei a diferença entre Apache e Apache Tomcat : o Apache é o servidor web http lida apenas com o tráfego http, o tomcat é o contêiner servelet para processar a solicitação (apenas para Java). Na construção, o Tomcat tem o Apache. (Por favor, corrija-me se eu estiver errado)

    
por Veerendra 12.02.2017 / 13:34

3 respostas

2

No Apache HTTPD basicamente seria assim:

<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>

Observação: você precisará dos módulos mod_proxy e mod_proxy_http carregados primeiro.

    
por 13.02.2017 / 09:26
1

Graças a @ ezra-s, posso enviar dados. Mas ao fazer isso, lutei um pouco, então só quero compartilhar algumas informações.

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

2.Modelos de ativação

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

3.Gerado certificado auto-assinado aqui está o guia

4.Adicionado config para /etc/apache2/sites-enabled/000-default.conf

5.Eu tentei reiniciar o sudo service apache2 restart . Mas eu tenho erro

 * 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.

Após uma longa pesquisa na Internet, encontrei o mod_xml2enc bug não disponível . Então, eu construí este módulo a partir da fonte

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 ]

Obrigado pela ajuda!

    
por 13.02.2017 / 12:49
-1

Existem várias maneiras de alcançar o resultado desejado.

Faça seu Tomcat ouvir em 127.0.0.1:8080 e configure algum servidor front-end antes dele. Seu servidor front-end escutará *: 80 e *: 443 e encaminhará todos os pedidos para o Tomcat oculto.

Existem muitos servidores front-end. Pode ser o Apache (como você ofereceu), o nginx (que consome menos memória) ou o haproxy (que oferece ótimas estatísticas junto com um espaço de memória quase constante).

Um possível snippet de configuração para o nginx pode ser:

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;
    }
}

Para a configuração TLS de geração, eu recomendo o gerador de configuração SSL do Mozilla

    
por 12.02.2017 / 14:02