multisite – WordPress wp-admin przekierowanie do aws lb
Umieściliśmy WordPress na instancji AWS EC2 (prywatna podsieć) i podłączyliśmy ją do modułu równoważenia obciążenia aplikacji AWS (dostępnego do Internetu), a następnie do AWS Cloud Front. Nasza witryna internetowa jest skierowana do AWS Cloud Front.
Żądania wyglądają następująco: Użytkownik –> www.example.in –> AWS Cloud Front –> AWS ALB –> Instancja AWS EC2.
W module równoważenia obciążenia aplikacji mamy jednego słuchacza z dwiema regułami.
słuchacz z portem 80 i przekierowaniem do reguł zaplecza (reguła domyślna i inna reguła /blogs/*)
Nasz WordPress znajduje się pod adresem /var/www/html/blogs.
Zatem za każdym razem, gdy użytkownik wchodzi na www.example.in, wszystko działa prawidłowo, www.example.in/blogs/ również działa prawidłowo, ale gdy próbujemy uzyskać dostęp do www.example.in/blogs/wp-admin, następuje przekierowanie do modułu równoważenia obciążenia aplikacji.
Hmmm… nie można uzyskać dostępu do tej strony alb-example-app-lb-xxxxxxxxx.us-east-1.elb.amazonaws.com odmówił połączenia
Przeczytałem jedno z rozwiązań, że jeśli dodamy wiele zachowań, to zadziała, nawet ja próbowałem, ale nic nie działa.
według mojej wiedzy musimy dodać jedno zachowanie domyślne i inne zachowanie dla /blogs/*, a następnie powinno to dotyczyć wszystkich podfolderów i plików.
Plik .htaccess do przekierowania
[root@ip-10-0-2-194 blogs]# cat .htaccess
# BEGIN WordPress Multisite
# Using subfolder network type:
# Let apache know we're behind a SSL reverse proxy
SetEnvIf X-Forwarded-Proto "https" HTTPS=on
# Redirect to HTTPS
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
RewriteBase /blogs/
RewriteRule ^index\.php$ - [L]
# Add a trailing slash to /wp-admin
RewriteRule ^([_0-9a-zA-Z-]+/)?wp-admin$ $1wp-admin/ [R=301,L]
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]
RewriteRule ^([_0-9a-zA-Z-]+/)?(wp-(content|admin|includes).*) $2 [L]
RewriteRule ^([_0-9a-zA-Z-]+/)?(.*\.php)$ $2 [L]
RewriteRule . /blogs/index.php [L]
</IfModule>
# END WordPress Multisite
[root@ip-10-0-2-194 blogs]#
dodałem te wiersze do wp-config.php.
define('WP_HOME', '
define('WP_SITEURL', '
//Begin Really Simple SSL Load balancing fix
$server_opts = array("HTTP_CLOUDFRONT_FORWARDED_PROTO" => "https", "HTTP_CF_VISITOR"=>"https", "HTTP_X_FORWARDED_PROTO"=>"https", "HTTP_X_FORWARDED_SSL"=>"on", "HTTP_X_FORWARDED_SSL"=>"1");
foreach( $server_opts as $option => $value ) {
if ((isset($_ENV["HTTPS"]) && ( "on" == $_ENV["HTTPS"] )) || (isset( $_SERVER[ $option ] ) && ( strpos( $_SERVER[ $option ], $value ) !== false )) ) {
$_SERVER[ "HTTPS" ] = "on";
}
}
//END Really Simple SSL
nawet zaktualizowaliśmy naszą bazę danych o siteurl i home.
MariaDB [wordpress]> SELECT option_name, option_value FROM wp_options WHERE option_name="siteurl" OR option_name="home";
+-------------+-----------------------------------+
| option_name | option_value |
+-------------+-----------------------------------+
| home | |
| siteurl | |
+-------------+-----------------------------------+
2 rows in set (0.000 sec)
MariaDB [wordpress]>
utworzyliśmy certyfikat z rozszerzeniem *.example.in www.example.in i dołączyliśmy go do chmury AWS.
Naszym celem końcowym jest uzyskanie dostępu do strony wp-admin z naszej domeny. Kiedy klikniemy www.example.in/blogs/wp-admin, musimy uzyskać stronę logowania i móc się zalogować.