Wordpress 앞단에 SSL 적용을 위해 Nginx를 두는 경우가 있다.
Nginx를 통해 conf를 작성하고, Wordpress 설정에서 SITE URL, HOME URL을 지정하면, "ERR_TOO_MANY_REDIRECTS"라는 식으로 에러가 발생한다. 이 케이스에는 간단하게 해결할 수 있다.
일단, 나 같은 경우에는 Docker를 이용해서 Nginx, Wordpress를 연동해두었는데 Wordpress에 내장된 내용은 아예 건들지 않고, Nginx만 아래와 같이 설정했다.
server {
listen 80;
listen [::]:80;
server_name <SITE URL>;
location / {
return 301 https://$host$request_uri;
}
}
server {
listen 443 ssl;
listen [::]:443 ssl;
server_name <SITE URL>;
ssl_certificate certs/live/<SITE URL>/fullchain.pem;
ssl_certificate_key certs/live/<SITE URL>/privkey.pem;
ssl_session_timeout 5m;
ssl_protocols TLSv1.2;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
## This should be in your http block and if it is, it's not needed here.
# index index.php;
location = /favicon.ico {
log_not_found off;
access_log off;
proxy_pass http://wordpress;
}
location = /robots.txt {
allow all;
log_not_found off;
access_log off;
proxy_pass http://wordpress;
}
location / {
add_header Access-Control-Allow-Origin '*';
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://wordpress;
}
# For cert-bot
location /.well-known/ {
root /var/www/;
}
client_max_body_size 64M;
# Enable Gzip compression
gzip on;
# Compression level (1-9)
gzip_comp_level 5;
# Don't compress anything under 256 bytes
gzip_min_length 256;
# Compress output of these MIME-types
gzip_types
application/atom+xml
application/javascript
application/json
application/rss+xml
application/vnd.ms-fontobject
application/x-font-ttf
application/x-font-opentype
application/x-font-truetype
application/x-javascript
application/x-web-app-manifest+json
application/xhtml+xml
application/xml
font/eot
font/opentype
font/otf
image/svg+xml
image/x-icon
image/vnd.microsoft.icon
text/css
text/plain
text/javascript
text/x-component;
# Disable gzip for bad browsers
gzip_disable "MSIE [1-6]\.(?!.*SV1)";
}
위와 같이 구성하고, Wordpress 설정에서 https로 시작하는 URL을 지정하면, wp-admin에 들어갈 때 ERR_TOO_MANY_REDIRECTS라는 에러가 발생하는데, 아래 방법으로 간단하게 해결할 수 있다.
location / {
add_header Access-Control-Allow-Origin '*';
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
// 추가된 부분
proxy_set_header X-Forwarded-Proto https;
proxy_pass http://wordpress;
}
proxy_set_header X-Forwarded-Proto https;
을 추가하면 된다. 해당 Header가 없으면 Wordpress에서는 http 요청으로 인식해서 http로 다시 보내고 nginx는 또 https로 보내고, 계속 핑퐁이 일어나는 모양이다.
이 문제가 일어나는 분들 꼭 해결하셨으면 좋겠다.