Centos 7 を インストールした VPS で nginx + php + ssl で構築したので忘備録です。
iptablesの準備
1 2 3 4 |
iptables -I INPUT 1 -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT; iptables -I INPUT 1 -p tcp -m state --state NEW -m tcp --dport 443 -j ACCEPT; service iptables save service iptables reload |
yumの準備
1 |
yum install epel-release |
これはepelのリポジトリを追加するのですが、これによってエラーが出ることがあります。
one of the configured repositories failed
という内容のエラーです。
そうしましたら、/etc/yum.repo.d/epel.repo の metaurl をコメントアウト、baseurl をコメントインします。
すると使えるようになります。ミラーサイトのどこかが使えなくなっているようです。
1 |
rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-7.rpm |
さらにリポジトリを追加します。
nginx, php を install して 設定
1 2 |
yum install nginx yum install remi-pho70 php-fpm |
nginx と php を組み合わせて動かすには /etc/nginx/conf.d/ の下に設定ファイルを追加します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
server { listen 80; server_name ex-sample.net root /var/www/ex-sample/public; index index.php index.html index.htm; client_max_body_size 10m; location ~ \.php$ { fastcgi_split_path_info ^(.+\.php)(/.+)$; fastcgi_pass unix:/var/run/php-fpm.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param PATH_INFO $fastcgi_path_info; include fastcgi_params; } } |
index.php に全てのアクセスを集中するなどの場合は
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
server { listen 80; server_name ex-sample.net root /var/www/ex-sample/public; index index.php index.html index.htm; client_max_body_size 10m; location / { try_files $uri $uri/ /index.php?$query_string; } location ~ \.php$ { fastcgi_split_path_info ^(.+\.php)(/.+)$; fastcgi_pass unix:/var/run/php-fpm.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param PATH_INFO $fastcgi_path_info; include fastcgi_params; } } |
SSL を追加、設定
google chrome が SSL 対応必須になっており、今時SSLがないwebサイトはありえないので、Let’s Encrypt の 証明書を取得していきます。
が、VPSサーバーが古いよう(Centos7だけど)で certbot とか certbot-auto が使えないようです。AWSとかでは利用できるので、そちらだと楽でしょう。
そこで getssl を使っていきます。
1 2 |
curl --silent https://raw.githubusercontent.com/srvrco/getssl/master/getssl > getssl chmod 700 getssl |
このgetsslを使おうと思ったら dig とかが入ってないよ、と言われたので、追加します。
1 |
yum install bind-utils |
そして 作成を開始していきます。
1 |
./getssl -c ex-sample.net |
成功すると、
(1) ~/.getssl/getssl.cfg
(2) ~/.getssl/ex-sample.net/getssl.cfg
が追加されます。
(1)において以下の変更を加えます。
1 2 3 |
CA="https://acme-v02.api.letsencrypt.org" AGREEMENT="https://letsencrypt.org/documents/LE-SA-v1.1.1-August-1-2016.pdf" ACCOUNT_EMAIL="" // メールアドレス |
(2)において以下の変更を加えます。
1 2 3 |
CA="https://acme-v02.api.letsencrypt.org" SANS="" ACL=('/var/www/ex-sample.net/.well-known/acme-challenge') |
ACL は public (公開フォルダ) の .well-known/acme-challenge です。
では実行します。
1 |
./getssl ex-sample.net |
すると
1 2 |
/root/.getssl/ex-sample.net/ex-sample.net.crt; /root/.getssl/ex-sample.net/ex-sample.net.key; |
というファイルが出来上がります。これをそれぞれ設定します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
server { listen 80; server_name ex-sample.net; return 301 https://$host$request_uri; } ssl_protocols TLSv1 TLSv1.1 TLSv1.2; server { listen 443 ssl; server_name ex-sample.net root /var/www/ex-sample/public; ssl_certificate /root/.getssl/ex-sample.net/ex-sample.net.crt; ssl_certificate_key /root/.getssl/ex-sample.net/ex-sample.net.key; index index.php index.html index.htm; client_max_body_size 10m; location / { try_files $uri $uri/ /index.php?$query_string; } location ~ \.php$ { fastcgi_split_path_info ^(.+\.php)(/.+)$; fastcgi_pass unix:/var/run/php-fpm.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param PATH_INFO $fastcgi_path_info; include fastcgi_params; } } |
この例では 80 番ポート (通常の http ) でアクセスされた場合、 443 ( https ) に飛ばします。