setup wordpress on oracle cloud
目次
1. Let's Encrypt
2. Security Rules
3. iptables
4. nginx
5. wp-config.php
2. Security Rules
3. iptables
4. nginx
5. wp-config.php
oracle cloud上で、ubuntu 16.04 を利用してこのblogをあげている。
今後のためのメモ
Let's Encrypt
domain 認証でSSLの証明書を取得。
docker container で簡単。
docker run -it --rm --name certbot \
-v "$(pwd)/etc/letsencrypt:/etc/letsencrypt" \
-v "$(pwd)/var/lib/letsencrypt:/var/lib/letsencrypt" \
certbot/certbot \
certonly --manual -d *.ドメイン名 \
-m メイルアドレス \
--agree-tos \
--manual-public-ip-logging-ok \
--preferred-challenges dns-01 \
--server https://acme-v02.api.letsencrypt.org/directory
結果として、こんな出力。
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Please deploy a DNS TXT record under the name
_acme-challenge.ドメイン名 with the following value:
xxxxxxxxxxQxxxxxxxxxxxxxxxxxxxxxxxxxxqxxxxxxx
Before continuing, verify the record is deployed.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
指定された value を DNSのTXTレコードとして設定すればOK。
あとは、dockerを起動したカレントディレクトリにある以下のファイルを、後述のnginx を起動するサーバ上に移動しておく。
./etc/letsencrypt/archive/{ドメイン名}/privkey{n}.pem
./etc/letsencrypt/archive/{ドメイン名}/fullchain{n}.pem
Security Rules
Oracle Cloud の管理画面で、 Network Securty Group
の設定で 443 port を公開しておく。
iptables
/etc/iptables/rules.v4
にhttps の許可を設置しておく。
# CLOUD_IMG: This file was created/modified by the Cloud Image build process
# iptables configuration for Oracle Cloud Infrastructure
# See the Oracle-Provided Images section in the Oracle Cloud Infrastructure
# documentation for security impact of modifying or removing these rule
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [463:49013]
:InstanceServices - [0:0]
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -p udp --sport 123 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 443 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
-A OUTPUT -d 169.254.0.0/16 -j InstanceServices
...
nginx
ssl の設定をしておく。
下記は、docker container を利用して、 localhost:8080
にwordpress サーバが待ち受けしている例。
##
# server configuration
#
server {
# SSL configuration
listen 443 ssl default_server;
listen [::]:443 ssl default_server;
server_name サーバ名;
ssl on;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers on;
ssl_ciphers 'ECDHE+RSAGCM:ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:!aNULL!eNull:!EXPORT:!DES:!3DES:!MD5:!DSS';
ssl_certificate /etc/letsencrypt/live/ドメイン名/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/ドメイン名/privkey.pem;
location / {
proxy_pass http://localhost:8080/;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
proxy_redirect off;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Proto https;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_redirect http:// https://;
}
}
wp-config.php
外部からSSLを受けて、nginx のreverse proxy で内部のhttp server(wordpress) に転送しているため、wordpressは自分のことを http
サービスだと思っている。
wp-config.php
に https サービスであることを記述追加しておく。
$_SERVER['HTTPS'] = 'on';