Получите Apache2, работающий с nginx как обратный прокси

Моя цель состоит в том, чтобы обеспечить безопасный почтовый сервис с нового сервера Ubuntu 16.04. Чтобы сделать это, я хочу настроить Apache2 с nginx, работающим как его обратный прокси.

Моя непосредственная проблема состоит в том, что Apache не удается запуститься, утверждая, что нет никакого присвоенного сертификата SSL (см. вывод от Терминала в конце этого вопроса), даже при том, что я еще не пытаюсь использовать HTTPS.

Мои вопросы:

  • Если Apache работает на локальном порте, это недостаточно, что nginx знает о каких-либо сертификатах SSL?
  • Что я должен сделать, чтобы заставить Apache начинать слушать на в локальном адресе?

Вот мое понимание того, что я должен сделать. Я был бы благодарен, если Вы могли бы указать, где мое понимание ошибочно.

  • Установите nginx и Apache2
  • Создайте nginx блок сервера к:
    • Послушайте на портах 80 (и 443)
    • (Трафик перенаправления от порта 80 для портирования 443)
    • (Соглашение с сертификацией SSL)
    • Передайте любые запросы для файла PHP к Apache в 127.0.0.1:8080
  • Настройте Apache к:
    • Послушайте только на порте 8080, не на порте 443
    • Останьтесь незнакомыми с любой сертификацией SSL

Мне нравится иметь дело с одной проблемой за один раз, таким образом, я в настоящее время не принимаю во внимание вопрос сертификатов SSL и пытаюсь получить Apache, работающий с nginx как его обратный прокси на порте 80 только.


Вот конфигурационные файлы, которые я имею в распоряжении:

nginx

$ sudo nano /etc/nginx/sites-available/webmail

server {
  listen   80;

  root /var/www/webmail/web;
  index index.php index.html index.htm;

  server_name webmail.mydomain.com;

  # Look for...
  # * the exact path
  # * a default (index.*) file, considering the path to be a directory
  # ... and if that fails:
  # * get the index.php script at the root to deal with the request

  location / {
    try_files $uri $uri/ /index.php;
  }

  # If the chosen path leads to a PHP fie:
  # * forward the request to Apache running at 127.0.0.1:8080
  # * after having modified certain headers

  location ~ \.php$ {
    proxy_set_header X-Real-IP  $remote_addr;
    proxy_set_header X-Forwarded-For $remote_addr;
    proxy_set_header Host $host;
    proxy_pass http://127.0.0.1:8080;
  }

  # If there are any Apache HT files in the chosen directory
  # ignore any direct requests for them

  location ~ /\.ht {
    deny all;
  }
}

Apache2

$ sudo nano /etc/apache2/sites-available/webmail.conf 

<VirtualHost 127.0.0.1:8080>
        ServerName webmail.mydomain.com
        ServerAdmin admin@mydomain.com
        DocumentRoot /var/www/webmail/web
        <Directory "/var/www/webmail/web">
            Options FollowSymLinks
            AllowOverride All
        </Directory>

        ErrorLog ${APACHE_LOG_DIR}/error.log
        LogLevel warn
        CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

Порты Apache2

$ sudo nano /etc/apache2/ports.conf

Listen 127.0.0.1:8080

#<IfModule ssl_module>
#       Listen 443
#</IfModule>

#<IfModule mod_gnutls.c>
#       Listen 443
#</IfModule>

Обратите внимание, что я явно не прошу, чтобы Apache послушал на порте 443. Есть ли другое место в некотором другом файле конфигурации, который говорит Apache слушать на порте 443?


Вот является мой заполнитель PHP и файлами HTML в их ожидаемых местах:

index.php

$ sudo nano /var/www/webmail/web/index.php

<?php
  echo "PHP from /var/www/webmail/web/index.php\n";
?>

index.html

$ sudo nano /var/www/webmail/web/index.html

<html>
  HTML from /var/www/webmail/web/index.html
</html>

В браузере запрос на http://webmail.mydomain.com/index.html успешно выполняется как ожидалось, но запрос к результатам http://webmail.mydomain.com/index.php в загружаемом файле, не выполняемый.


Вот то, что происходит, когда я пытаюсь запустить Apache2:

$ sudo /etc/init.d/apache2 restart
[ ok ] Restarting apache2 (via systemctl): apache2.service.

$ sudo service apache2 status
* apache2.service - LSB: Apache2 web server
   Loaded: loaded (/etc/init.d/apache2; bad; vendor preset: enabled)
  Drop-In: /lib/systemd/system/apache2.service.d
           `-apache2-systemd.conf
   Active: inactive (dead) since <Time>; 3s ago
     Docs: man:systemd-sysv-generator(8)
  Process: 16059 ExecStop=/etc/init.d/apache2 stop (code=exited, status=0/SUCCESS)
  Process: 16043 ExecStart=/etc/init.d/apache2 start (code=exited, status=0/SUCCESS)

systemd[1]: Starting LSB: Apache2 web server...
apache2[16043]:  * Starting Apache httpd web server apache2
apache2[16043]: Action 'start' failed.
apache2[16043]: The Apache error log may have more information.
apache2[16043]:  *
apache2[16059]:  * Stopping Apache httpd web server apache2
apache2[16059]:  *
systemd[1]: Started LSB: Apache2 web server.

Вот содержание error.log:

$ sudo nano /var/log/apache2/error.log

[ssl:emerg] [pid 15943] AH02572: Failed to configure at least one certificate and key for myhostname.hostingservice.com:443
[ssl:emerg] [pid 15943] SSL Library Error: error:140A80B1:SSL routines:SSL_CTX_check_private_key:no certificate assigned
[ssl:emerg] [pid 15943] AH02311: Fatal error initialising mod_ssl, exiting. See /var/log/apache2/error.log for more information

(Это находится в var/log/apache2/error.log, и больше нет информации.)

Что я пропускал?


Примечание: Основная цель этого сервера состоит в том, чтобы поставить приложение Метеора. Я принял решение сделать это использование Phusion Passenger и Nginx. В дополнение к почтовому сервису Apache будет также использоваться для поставки сайта WordPress.

2
задан 30 October 2017 в 12:01

1 ответ

У меня есть он работающий теперь. Я забыл удалять /etc/apache2/sites-disabled/default-ssl.conf, таким образом, Apache пытался выполнить безопасный сайт, который не был необходим.

Я впоследствии использовал sudo certbot --nginx для получения сертификата для Nginx, и теперь все работает надежно.

0
ответ дан 2 December 2019 в 08:29

Другие вопросы по тегам:

Похожие вопросы: