nginx в качестве обратного ssl-прокси (Apache + Varnish) пропускает собственную конфигурацию

У меня новая установка Ubuntu 14.04 со следующими шагами:

  • Apache2 2.4.7
  • MariaDB последняя стабильная версия
  • PHP 7.0.9 (и несколько модулей)
  • Apache настроен для работы с PHP7-FPM *
  • mod_rpaf работает с Apache2 **
  • PHPMyAdmin 4.6.3 корректно работает с PHP7.0.9.
  • WordPress 4.6 ***
  • Varnish 4.0
  • NginX 1.10. 1 с сертификатом ssl в / etc / nginx / ssl

  • и ** -> Проблема возникает до и после этих конфигураций *** -> wp-config.php has code to force ssl login and ssl admin. Both work fine with only Apache/Varnish. Made an ssl certificate for Apache and everything worked fine if Apache set to listen to port 443.

This is my /etc/apache2/ports.conf:

#NameVirtualHost 192.168.1.86
ServerName 192.168.1.86
Listen 8080

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

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

# vim: syntax=apache ts=4 sw=4 sts=4 sr noet

This is my /etc/apache2/sites-available/000-default.conf:

<IfModule mod_fastcgi.c>

    AddHandler php7-fcgi-www-data .php
    Action php7-fcgi-www-data /php7-fcgi-www-data
    Alias /php7-fcgi-www-data /usr/lib/cgi-bin/php7-fcgi-www-data
    FastCgiExternalServer /usr/lib/cgi-bin/php7-fcgi-www-data -socket /run/php/php7.0-fpm.www-data.sock -pass-header Authorization

    <Directory "/usr/lib/cgi-bin">
        Require all granted
    </Directory>

    <FilesMatch ".+\.ph(p[345]?|t|tml)$">
        SetHandler php7-fcgi-www-data
    </FilesMatch>

</IfModule>

<VirtualHost *:8080>

    ServerAdmin karls@192.168.1.86
    DocumentRoot /var/www/html
    ServerName 192.168.1.86

    <Directory /var/www/html/>
      AllowOverride All
    </Directory>

    Alias /phpmyadmin "/usr/share/phpmyadmin/"
    <Directory "/usr/share/phpmyadmin/">
      Order allow,deny
      Allow from all
      Require all granted
    </Directory>

    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined

</VirtualHost>

# vim: syntax=apache ts=4 sw=4 sts=4 sr noet

This is the 'backend' part in my /etc/varnish/default.vcl:

backend default {
    .host = "192.168.1.86";
    .port = "8080";
}

This is in my /etc/default/varnish:

DAEMON_OPTS="-a :80 \
         -T localhost:6082 \
         -f /etc/varnish/default.vcl \
         -S /etc/varnish/secret \
         -s malloc,256m"

This is my /etc/nginx/sites-available/default:

server {
    listen 443 ssl;

    server_name     192.168.1.86;
    ssl_certificate     /etc/nginx/ssl/nginx.crt;
    ssl_certificate_key /etc/nginx/ssl/nginx.key;

    location / {
        proxy_pass http://192.168.1.86:80;

        proxy_set_header X-Real-IP  $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto https;
        proxy_set_header X-Forwarded-Port 443;
        proxy_set_header Host $host;
    }
}
  • NO trace of port 80 in /etc/nginx/nginx.conf.
  • /etc/apache2/sites-available/000-default.conf matches the one in sites-enabled
  • /etc/nginx/sites-available/default matches the one in sites-enabled
  • Tried a lot of combination in /etc/nginx/sites-available/default with the 'listen 443', like:

    listen 443 ssl default_server; listen [::]: 443 ssl default_server ipv6only = on;

ПРОБЛЕМА

https://192.168.1.86/wp-admin (или https://192.168.1.86 и т. д.) показывает «Невозможно подключиться», что бы я ни делал в файлах конфигурации nginx. Пробовал МНОГОЕ.

Nginx вроде в порядке (синтаксис, конфигурация), но при активации не работает. В журнале ошибок указано:

2016/08/23 14:02:07 [emerg] 10857#10857: bind() to 0.0.0.0:80 failed (98: Address already in use)
2016/08/23 14:02:07 [emerg] 10857#10857: bind() to 0.0.0.0:80 failed (98: Address already in use)
2016/08/23 14:02:07 [emerg] 10857#10857: bind() to 0.0.0.0:80 failed (98: Address already in use)
2016/08/23 14:02:07 [emerg] 10857#10857: bind() to 0.0.0.0:80 failed (98: Address already in use)
2016/08/23 14:02:07 [emerg] 10857#10857: bind() to 0.0.0.0:80 failed (98: Address already in use)
2016/08/23 14:02:07 [emerg] 10857#10857: still could not bind()

По какой-то причине nginx пытается занять порт 80, но предполагается, что он использует 443.

Я видел, что у других людей была такая же проблема, например: nginx пытается подключиться к неправильному порту

Для ясности: я ДЕЙСТВИТЕЛЬНО знаю, что есть один сервер, использующий порт 80. Я НЕ знаю, почему nginx пытается использовать порт 80, когда он должен использовать 443.

Кто-нибудь может помочь, пожалуйста? Thanks in advance

1
задан 13 April 2017 в 15:14
1 ответ

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

а) Создайте свой собственный файл конфигурации в / etc / nginx / sites-available , а затем включить его с помощью программной ссылки в / etc / nginx / sites-enabled

б) полностью отключить сайт по умолчанию , удалив default в / etc / nginx / sites-enabled или просто измените порт конфигурации по умолчанию , чтобы nginx слушал порт 81 (например)

Так что в случае Nginx настаивает на прослушивании через http или что-то еще, что вызывает это поведение, он не будет использовать порт 80 и позволить Varnish использовать его.

В качестве альтернативы обновитесь до Ubuntu 16.04 LTS, что даст вам много обновлений всего, включая Openssl v1 .0.2+, чтобы вы могли включить поддержку HTTP / 2.

0
ответ дан 4 December 2019 в 05:56

Теги

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