S
S
sergius_anp2020-02-26 17:18:04
Web servers
sergius_anp, 2020-02-26 17:18:04

NGINX iframe redirect from https to http or https on port 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;
}

Answer the question

In order to leave comments, you need to log in

2 answer(s)
Виктор Таран, 2020-02-26
@shambler81

в последнее время отказался от 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

N
nokimaro, 2020-02-26
@nokimaro

To avoid problems with https, you need a valid SSL certificate, which is very difficult to get for ip (without a domain).
In your case, the best option is
1. make a subdomain with a valid https certificate, for example iframe.mydomain.ru
2. in the nginx settings, server_name iframe.mydomain.ruwe do proxy requests for your java application on the required port

location / {
    proxy_pass http://172.16.0.68:8085;
}

3. iframe respectively embed as src="https://iframe.mydomain.ru/..."
This will solve issues with https, issues of cross domain access, and will also allow you not to shine port 8085 into the world, since you can proxy within the local network.

Didn't find what you were looking for?

Ask your question

Ask a Question

731 491 924 answers to any question