Назад | Перейти на главную страницу

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

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

Это мой /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

Это мой /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

Это «бэкэнд» в моем /etc/varnish/default.vcl:

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

Это в моем / etc / default / varnish:

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

Это мой / 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;
    }
}

ЭТА ПРОБЛЕМА

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.

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

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

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

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

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

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