@sergius_anp

NGINX перенаправление iframe c https на http или https на порту 8085?

Доброго времени суток всем! Я новичок! Недавно столкнулся с проблемой, которая уже 3 день не дает мне покоя.
Вводные: centos 7 + nginx + php72 + wordpress, сайт работает (конфиг nginx mydomain.conf взял с интернетовской статьи https://serveradmin.ru/ustanovka-i-nastroyka-nginx...) все редиректы (www - /; http - https) выполняются. На этой же машине запущено java приложение и по адресу машины 172.16.0.68:8085 приложуха открывается и работает. Сайт работает на https, настроен letsencrypt через certbot.
Вопрос 1 Cтоит задача через iframe добавить на сайт это веб-приложение, работающее с этого же сервера по адресу http://127.0.0.1:8085(http://172.16.0.68:8085)
Но т.к. веб-приложение ходит по http сайт работающий по https страницу не открывает, ругаясь на отсутствие SSL сертификата.
То есть https://mydomain.ru/stranica на странице и он не показывает. Пробовал запускать на другом сайте, который работал по http - все нормально запустилось и работало.
Вопрос 2 Есть ли возможность прописать конфиг так, чтобы на порту 8085 работал https, что так же решит проблему с отображением? Может создать еще виртуальный хост?
мой nginx.conf
server {
    listen 80;
    server_name mydomain.ru;
    root /var/www/mydomain.ru/www/;
    index index.php index.html index.htm;
    access_log /var/www/mydomain.ru/www/log/access.log main;
    error_log /var/www/mydomain.ru/www/log/error.log;

    location / {
    return 301 https://mydomain.ru$request_uri;
    }

   location ~* ^.+.(js|css|png|jpg|jpeg|gif|ico|woff)$ {
   return 301 https://mydomain.ru$request_uri;
   }

   location ~ \.php$ {
   return 301 https://mydomain.ru$request_uri;
   }

    location = /favicon.ico {
    log_not_found off;
    access_log off;
    }

    location = /robots.txt {
    rewrite ^ /robots.txt break;
    allow all;
    log_not_found off;
    access_log off;
    }

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

server {
     listen  80;
     server_name  www.mydomain.ru;
     rewrite ^ https://mydomain.ru$request_uri? permanent;
}

server {
    listen 443 ssl http2;
    server_name mydomain.ru;
    root /var/www/mydomain.ru/www/;
    index index.php index.html index.htm;
    access_log /var/www/mydomain.ru/www/log/ssl-access.log main;
    error_log /var/www/mydomain.ru/www/log/ssl-error.log;

    keepalive_timeout		60;
    ssl_certificate		/etc/letsencrypt/live/mydomain.ru/fullchain.pem;
    ssl_certificate_key		/etc/letsencrypt/live/mydomain.ru/privkey.pem;
    ssl_protocols 		TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers 'ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA';
    ssl_dhparam 		/etc/letsencrypt/ssl-dhparams.pem;
    add_header			Strict-Transport-Security 'max-age=604800';

    location / {
    try_files $uri $uri/ /index.php?$args;
    
    location ~* ^.+.(js|css|png|jpg|jpeg|gif|ico|woff)$ {
    access_log off;
    expires max;
    }

    location ~ \.php$ {
    try_files  $uri =404;
    fastcgi_pass   unix:/var/run/php72-fpm.sock;
    #fastcgi_pass    127.0.0.1:9000;
    fastcgi_index index.php;
    fastcgi_param DOCUMENT_ROOT /var/www/mydomain.ru/www/;
    fastcgi_param SCRIPT_FILENAME /var/www/mydomain.ru/www$fastcgi_script_name;
    fastcgi_param PATH_TRANSLATED /var/www/mydomain.ru/www$fastcgi_script_name;
    include fastcgi_params;
    fastcgi_param QUERY_STRING $query_string;
    fastcgi_param REQUEST_METHOD $request_method;
    fastcgi_param CONTENT_TYPE $content_type;
    fastcgi_param CONTENT_LENGTH $content_length;
    fastcgi_param HTTPS on;
    fastcgi_intercept_errors on;
    fastcgi_ignore_client_abort off;
    fastcgi_connect_timeout 60;
    fastcgi_send_timeout 180;
    fastcgi_read_timeout 180;
    fastcgi_buffer_size 128k;
    fastcgi_buffers 4 256k;
    fastcgi_busy_buffers_size 256k;
    fastcgi_temp_file_write_size 256k;
    }

    location = /favicon.ico {
    log_not_found off;
    access_log off;
    }

    location = /robots.txt {
    allow all;
    log_not_found off;
    access_log off;
    }

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

server {
     listen  443 ssl http2;
     server_name  www.mydomain.ru;
     rewrite ^ https://mydomain.ru$request_uri? permanent;
}
  • Вопрос задан
  • 332 просмотра
Пригласить эксперта
Ответы на вопрос 2
в последнее время отказался от iframe совсем
на мойз взгляд это не больший костыль, зато обладает морем плюсов, такие как возможность работы с адаптивном и стрреплейсом а следоватлеьно и протокол можно тоже подменять ;)
https://thisinterestsme.com/php-curl-proxy/

ps.
замени устаревший TSL, его уже не поддерживает crhome а сертификат понижают в классе с А+ до B
ssl_protocols TLSv1.2 TLSv1.3;
 ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;

https://www.ssllabs.com/ssltest
Ответ написан
Комментировать
nokimaro
@nokimaro
Меня невозможно остановить, если я смогу начать.
Чтобы небыло проблем с https то нужен валидный SSL сертификат, который для ip (без домена) получить очень проблематично.

В вашем случае самый оптимальный вариант такой
1. сделать субдомен и с валидным https сертификатом например iframe.mydomain.ru
2. в настройках nginx для server_name iframe.mydomain.ru делаем проксирование запросов на ваше java-приложение на нужном порту
location / {
    proxy_pass http://172.16.0.68:8085;
}

3. iframe соотв-но встраиваете как src="https://iframe.mydomain.ru/..."
Это решит вопросы и с https, вопросы cross domain доступа, а так же позволит не светить 8085 портом в мир, так как проксировать можно в рамках локальной сети.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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