28 марта 2024, 19:01

Цитата дня:

Но самым опасным врагом, которого ты можешь встретить, будешь всегда ты сам. Фридрих Вильгельм Ницше


nginx + apache2 + ssl

Автор bobylev, 28 августа 2018, 15:14

« предыдущая тема - следующая тема »

0 Пользователей и 1 Гость просматривают эту тему.

Вниз

bobylev

Всем привет!

Настроена связка nginx + apache2 по https://interface31.ru/tech_it/2016/08/nastraivaem-veb-server-nginx-kak-front-end-k-apache.html

Теперь понадобилось к одному домену добавить ssl. Использую бесплатный сертификат от Let's Encrypt. Все файлы с генерировались.

Настроил ssl в конфиге nginx. html открывается отлично через https, но если запросить файл php, то получаю этот файл на скачивание.
Обращаюсь к этому же файлу через http - все отрабатывает. Подскажите, пожалуйста, в чем дело?


Конфиг виртуального хоста nginx
server {
    listen 80;
    server_name some-domain.ru www.some-domain.ru;

    root /var/www/test;
    charset utf-8;

    access_log /var/log/nginx/test.access.log main;
    error_log /var/log/nginx/test.error.log error;

    index index.html index.php;

    include /etc/nginx/templates/apache24.conf;

    location ^~ /.well-known/acme-challenge/ {
        default_type "text/plain";
        root /var/www/letsencrypt;
    }
    location = /.well-known/acme-challenge/ {
        return 404;
    }

    rewrite ^ https://some-domain.ru$request_uri? permanent;
}
server {
    server_name some-domain.ru;
    listen 443 ssl http2;

    root /var/www/test;
    charset utf-8;

    index index.php index.html

    include /etc/nginx/templates/apache24.conf;

    ssl on;
    #ssl_session_timeout 10m;
    ssl_certificate /etc/letsencrypt/live/some-domain.ru/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/some-domain.ru/privkey.pem;
    ssl_trusted_certificate /etc/letsencrypt/live/some-domain.ru/chain.pem;
    ssl_dhparam /etc/letsencrypt/live/some-domain.ru/dhparam.pem;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;

    add_header Strict-Transport-Security "max-age=31536000;";
}




apache24.conf
location / {
    proxy_pass http://apache24;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $remote_addr;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_connect_timeout 120;
    proxy_send_timeout 120;
    proxy_read_timeout 180;
}

location ~* \.(gif|jpeg|jpg|gif|txt|png|tif|tiff|ico|jng|bmp|doc|pdf|rtf|xls|ppt|rar|rpm|swf|zip|bin|exe|dll|deb|cur)$ {
    access_log off;
    expires 3d;
}

location ~* \.(css|js)$ {
    access_log off;
    expires 180m;
}

location ~ /\.ht {
    deny all;
}


Конфиг виртуального хоста apache
<VirtualHost *:8080>
        ServerName some-domain.ru
        ServerAlias www.some-domain.ru
        ServerAdmin webmaster@localhost
        DocumentRoot /var/www/test

        SetEnvIf X-Forwarded-Proto https HTTPS=on

        ErrorLog ${APACHE_LOG_DIR}/test.error.log
        CustomLog ${APACHE_LOG_DIR}/test.access.log combined
        RewriteEngine On
        <Directory /var/www/test>
                AllowOverride All
                Options -Includes -Indexes -ExecCGI +FollowSymLinks
                DirectoryIndex index.php
                Require all granted
        </Directory>
</VirtualHost>

STALKER_SLX

1. Почему у Вас в настройках виртуального хоста Apache указано <VirtualHost *:8080>?! В то время как в приведённой Вами инструкции эта строчка имеет вид - <VirtualHost 127.0.0.1:8080> (то есть Апач должен работать только тут)!

2. Что наблюдаете в это время в логах при попытке открыть php-файла?!

3. А Вы пробовали "прикрутить сертификат" непосредственно к Apache?! Каков был результат?!

Уваров А.С.

Рабочий конфиг с рабочего сервера:

server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;

server_name example.com;



    ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
    ssl_session_timeout 1d;
    ssl_session_cache shared:SSL:50m;
    ssl_session_tickets off;

    ssl_dhparam /etc/ssl/certs/dhparam.pem;

    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers 'ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!DSS';
    ssl_prefer_server_ciphers on;


    add_header Strict-Transport-Security max-age=15768000;

    ssl_stapling on;
    ssl_stapling_verify on;

    resolver 8.8.8.8;

root /var/www/example.com;
access_log /var/log/nginx/example.com-ssl-access.log main;
error_log  /var/log/nginx/example.com-ssl-error.log error;
index index.php;

location / {
proxy_pass http://127.0.0.1:8888;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_connect_timeout 120;
proxy_send_timeout 120;
proxy_read_timeout 180;
}


location ~* \.(gif|jpeg|jpg|png|tif|tiff|ico|jng|bmp|doc|pdf|rtf|xls|ppt|rar|rpm|swf|zip|bin|exe|dll|deb|cur)$ {
            root         /var/www/example.com;
            access_log   off;
            expires      3d;
        }

location ~* \.(css|js)$ {
 root         /var/www/example.com;
            access_log   off;
            expires      180m;
        }

location ~ /\.ht {
                        deny  all;
                        }

location /phpmyadmin {
   root /usr/share/;
   index index.php;

   location ~ ^/phpmyadmin/(.+\.php)$ {
     try_files $uri =404;
     root /usr/share/;
     proxy_pass         http://127.0.0.1:8888;
   }
   
   location ~* ^/phpmyadmin/(.+\.(jpg|jpeg|gif|css|png|js|ico|html|xml|txt))$ {
     root /usr/share/;
     expires 1M;
   }
}


Единственное, скобки проверьте, скопировал на глазок.

1. Почему у Вас в настройках виртуального хоста Apache указано <VirtualHost *:8080>?! В то время как в приведённой Вами инструкции эта строчка имеет вид - <VirtualHost 127.0.0.1:8080> (то есть Апач должен работать только тут)
Это не имеет принципиального значения и обозначает, что Апач может слушать все сетевые интерфейсы, однако в целях безопасности лучше ограничить его локалхостом. В тоже время для отладки такая настройка допустима, так как позволяет обратиться к Апачу напрямую и сравнить результат с обращением через Nginx.

bobylev

Рабочий конфиг с рабочего сервера:
Спасибо огромное!!! Подправил Ваш конфиг и все заработало)))

Вверх