Conținut mixt cu SSL, WordPress în spatele unui proxy invers

22 ian. 2017, 23:00:43
Vizualizări: 14.2K
Voturi: 2

Am întâmpinat probleme de conținut mixt cu SSL. Am solicitat un certificat SSL Let's Encrypt pentru site-ul meu de test WordPress care rulează în spatele unui proxy invers (articaproxy).

Același certificat SSL a fost implementat atât pe serverul proxy invers, cât și pe gazda virtuală WordPress.

Redirecționarea HTTP/HTTPS din proxy invers funcționează corect.

Am forțat URL-urile siteurl și home să folosească HTTPS în baza de date MySQL pentru a testa HTTPS.

Când deschid site-ul WordPress și apăs "show block content", consola Chrome afișează 'This page is insecure (broken HTTPS)'.

Consola Chrome raportează și că unele fișiere de stil/script/imagini nu sunt servite prin HTTPS fișiere de stil/script/imagini neîncărcate prin HTTPS

Am încercat să instalez plugin-uri pentru a remedia problema, dar fără succes. Așa că le-am dezactivat. plugin-uri pentru remedierea conținutului mixt

Zona de administrare WordPress nu poate fi încărcată din cauza erorii ERR_TOO_MANY_REDIRECTS.

Aș dori să știu cum să rezolv problemele de conținut mixt și redirecționările multiple la pagina de login pentru administrare.

Sugestiile sunt binevenite.

****************** Actualizare ***********************

Vreau să ofer mai multe detalii despre setările site-ului meu de test WordPress.

Părți din valorile wp-config.php legate de WP_SITEURL, WP_HOME, HTTPS:

define('WP_SITEURL', 'https://'.$_SERVER['HTTP_HOST']);
define('WP_HOME', 'https://'.$_SERVER['HTTP_HOST']);
define('FORCE_SSL_ADMIN', true);

if ( isset( $_SERVER['HTTP_X_FORWARDED_PROTO'] ) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https')
$_SERVER['HTTPS']='on';

Valorile 'siteurl' și 'home' din tabelul wp_options în baza de date WordPress:

https://yuantafood.i-shopping.email
https://yuantafood.i-shopping.email

După cum am menționat, pot accesa pagina wp-admin doar cu adresa IP internă. Încercările de conectare la wp-admin folosind IP/FQDN extern nu funcționează din cauza erorii: ERR_TOO_MANY_REDIRECTS.

După ce am căutat pe Google, forțarea SSL prin .htaccess pare să funcționeze pentru alții pentru a rezolva problemele de conținut mixt.

Am încercat și eu diverse metode de editare a .htaccess, în principal redirecționare permanentă 301 și temporară 302.

Conținutul fișierului .htaccess din folderul WordPress (301):

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On

# RewriteBase /
# RewriteRule ^index\.php$ - [L]
# RewriteCond %{REQUEST_FILENAME} !-f
# RewriteCond %{REQUEST_FILENAME} !-d
# RewriteRule . /index.php [L]

RewriteCond %{SERVER_PORT} 80
RewriteRule ^(.*)$ https://yuantafood.i-shopping.email/$1 [R=301,L]

</IfModule>
# END WordPress

# Wordfence WAF
<IfModule mod_php5.c>
php_value auto_prepend_file '/var/www/wordpress/wordfence-waf.php'
</IfModule>
<Files ".user.ini">
<IfModule mod_authz_core.c>
Require all denied
</IfModule>
<IfModule !mod_authz_core.c>
Order deny,allow
Deny from all
</IfModule>
</Files>
# END Wordfence WAF

Atât redirecționarea 301 cât și 302 au eșuat și au făcut ca întregul site să nu se încarce din cauza ERR_TOO_MANY_REDIRECTS.

1
Comentarii

Iată două capturi de ecran și observații despre evenimentele de reverse proxy în cazul în care redirecționarea HTTP către HTTPS a eșuat.

redirecționare 301 &

redirecționare 302

Owen Owen
25 ian. 2017 21:55:03
Toate răspunsurile la întrebare 2
3

Ai modificat adresa "WordPress Address (URL)" și "Site Address (URL)" din Setări -> General în WP-Admin de la http la https? Golește cache-ul și verifică din nou? Dacă încă există protocoale mixte, probabil provin din URL-uri hardcodate precum imagini și link-uri externe. Poți să le lași așa sau să le corectezi. Am trecut prin asta când am trecut la SSL, poți arunca o privire la partea finală a articolului meu.

23 ian. 2017 15:14:56
Comentarii

Mulțumesc pentru răspuns.

Deoarece am forțat câmpurile siteurl și home în tabelul wp_options cu valoarea 'https://yuantafood.i-shopping.email'

"Adresa WordPress (URL)" și "Adresa site (URL)" din Setări sunt text gri: http://imgur.com/C4ajdBx

Am făcut flush la cache și am verificat din nou, problema conținutului mixt persistă.

Pot să mă loghez în pagina de administrare doar cu adresa IP internă. Care nu este afectată de ERR_TOO_MANY_REDIRECTS: http://imgur.com/YBrUess

Mulțumesc pentru articol, Why No Padlock este un site foarte util.

Setarea regulii de redirecționare HTTP la HTTPS în .htaccess funcționează pentru alții, nu și pentru mine.

Owen Owen
23 ian. 2017 19:14:11

Folosești Apache sau Nginx? .htaccess funcționează doar pe Apache.

hcheung hcheung
24 ian. 2017 02:20:33

Bună~ Folosesc Apache versiunea 2.4.10 .

Owen Owen
24 ian. 2017 08:11:23
7

Elimină toate plugin-urile care forțează SSL pe care le rulezi, revino la setările implicite în fișierele wp-config.php și .htaccess înainte de a aplica forțarea HTTPS. Acest lucru va elimina toate conflictele și buclele de redirecționare pe care le ai. După aceea, urmează acești pași:

  1. Descarcă Interconnect IT's Database Search & Replace Script de aici
  2. Dezarhivează fișierul și plasează folderul în directorul rădăcină al WordPress-ului tău, apoi redenumește folderul în replace (captură de ecran)
  3. Accesează noul folder creat în browser (ex: http://yuantafood.i-shopping.email/replace) și vei vedea instrumentul de căutare/înlocuire
  4. În câmpurile "search for…" și "replace with…":
    • Înlocuiește: http://yuantafood.i-shopping.email/ (HTTP, non-SSL)
    • Cu: https://yuantafood.i-shopping.email/ (HTTPS)

Poți să apeși butonul dry run din secțiunea actions pentru a vedea ce va fi înlocuit înainte de a executa scriptul. După ce ai terminat, asigură-te că elimini folderul /replace/.

Urmând pașii de mai sus ar trebui să te asiguri că toate linkurile tale rulează pe HTTPS. Totuși, poți folosi și plugin-ul Remove HTTP pentru a te asigura că nu mai ai probleme de conținut mixt.

25 ian. 2017 21:24:25
Comentarii

Salut~ Am rulat scriptul Search & Replace înainte.

Urmând pașii tăi, l-am rulat din nou.

Este foarte surprinzător că valoarea: 'http://yuantafood.i-shopping.email/' încă poate fi găsită în tabela wp_wfHits!

Sunt generate automat? aici este captura mea de ecran după rularea căutării și înlocuirii.

Mulțumesc ție, numărul de conținut mixt a scăzut la 1. Și enervantul ERR_TOO_MANY_REDIRECTS a dispărut de pe linkul extern al paginii wp-admin :)

conținut mixt: wp-emoji-release.min.js

Owen Owen
25 ian. 2017 23:10:20

@Owen De acum înainte, nu ar trebui să mai întâmpini cereri HTTP de pe site-ul tău, deoarece toate au fost actualizate. Dacă folosești vreun plugin de cache, asigură-te că ștergi cache-ul de pe site-ul tău și din browser. Folosești pluginul Remove HTTP?

Ethan Rævan Ethan Rævan
25 ian. 2017 23:27:26

Mulțumesc! Cu toată ajutorul vostru, sunt pe drumul cel bun. Cum pot șterge cache-ul de pe site-ul WordPress? Folosesc pluginul Remove HTTP așa cum a sugerat Ethan. După activarea și dezactivarea testului Remove HTTP, am redus conținutul mixt la 1. Lista pluginurilor mele activate în prezent.

Owen Owen
25 ian. 2017 23:45:30

@Owen Nu pare că vreunul dintre acele plugin-uri ar cauza probleme. Dacă introduc manual https://yuantafood.i-shopping.email se va încărca cu SSL fără probleme. Asta înseamnă că întrebarea ta a fost rezolvată. Pentru a preveni ca acest thread să fie supraîncărcat cu comentarii și să devieze de la subiect, dă click pe bifa de lângă răspunsul meu și deschide o nouă întrebare despre cum să forțezi site-ul tău să folosească HTTPS (SSL).

Ethan Rævan Ethan Rævan
26 ian. 2017 04:31:06

După ce am citit un articol de blog de PIOTR KUNICKI. Am urmat instrucțiunile pentru eliminarea Emoji. (Va trebui să faci asta din nou după ce versiunea temei tale active este actualizată.)

Funcționează! Lacătul verde apare fără avertismente. (deși există câteva avertismente de conținut mixt pe pagina wp-admin).

Următorul pas ar fi să forțez toate URL-urile HTTP să se redirecționeze către HTTPS. Aveți sugestii pentru mine vă rog :)

Owen Owen
26 ian. 2017 04:49:40

@Owen Mă bucur că jumătate din problemă este rezolvată. Creează un nou thread de întrebare sau caută o întrebare anterioară. Încearcă să cauți cum să "forțezi ssl" sau "forțează https".

Ethan Rævan Ethan Rævan
26 ian. 2017 07:20:49

Am urmat un alt comentariu de la @thaevok. Adăugarea $_SERVER['HTTPS'] = 'on'; în wp-config.php a funcționat pentru mine. Acum, http redirecționează perfect către https.

Owen Owen
27 ian. 2017 21:27:31
Arată celelalte 2 comentarii