EC2(VPC) + nginx/1.9 + PHP7 + @ 環境構築メモ 的中文翻譯:EC2(VPC) + nginx/1.9 + PHP7 + @ 環境構築記錄

【附言】
Amazon Linux AMI已升级,
使得操作更加容易
适用于Amazon Linux AMI 2016.09的WordPress(PHP7+nginx)

每个设置方法在各个地方都有详细说明,
但是根据环境和版本可能会有所不同,所以要根据自己的环境进行设置。
详细的说明请参考链接页面。
sudo根据需要进行操作。

AWS (亚马逊云服务)

注册帐户

当您获得AWS帐户后,立即进行的必要的初始设置总结。

EC2(虚拟私有云)

从零开始的AWS入门指南第一篇:VPC部分

设定
$ passwd ec2-user

#ローカルタイム変更
$ cp -rp /etc/localtime /etc/localtime.org
$ cp -rp /usr/share/zoneinfo/Japan /etc/localtime
#yum updateなどでUTCにもどるのを防ぐ
-ZONE="UTC"
-UTC=true
+ZONE="Asia/Tokyo"
+UTC=false
-LANG=en_US.UTF-8
+LANG=ja_JP.UTF-8

FTP表示文件传输协议。

安装

$ yum install -y vsftpd
$ cp /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf.org

设定

+pasv_enable=YES
+pasv_addr_resolve=YES
+pasv_min_port=60001
+pasv_max_port=60100
#起動
$ service vsftpd start
$ chkconfig vsftpd on

PHP7 用汉语的原生方式改述

在AWS EC2(Amazon Linux)上,通过使用yum,快速实现PHP7+NginX的环境部署。

安装

$ rpm -Uvh ftp://ftp.scientificlinux.org/linux/scientific/6.4/x86_64/updates/fastbugs/scl-utils-20120927-8.el6.x86_64.rpm
$ rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-6.rpm
$ yum install -y php70 php70-php-fpm php70-php-mbstring php70-php-mysqlnd php70-php-mcrypt

有关在Amazon Linux上安装PHP7(remi)的步骤备忘录。

#epelからlibwebp を入れる
$ yum -y install libwebp --disablerepo=amzn-main --enablerepo=epel
#amzn-mainから必要なライブラリ郡を入れる
$ yum -y install libmcrypt libtool-ltdl libtidy libXpm libtiff gd-last autoconf automake
$ yum install -y php70-php-gd

如果要寻找其他库,请

$ yum list | grep php70

在等等或其他类似场合。

设置

$ cp /etc/opt/remi/php70/php-fpm.d/www.conf /etc/opt/remi/php70/php-fpm.d/www.conf.org
-user = apache
+user = nginx
-group = apache
+group = nginx
+date.timezone = "Asia/Tokyo"

nginx (pronounced “engine x”) 是一個免費的開源網頁伺服器以及反向代理伺服器。

在AWS EC2(Amazon Linux)上,使用yum来迅速部署PHP7+NginX环境,在nginx中启用HTTP/2。

安装

为了支持HTTP/2,需要安装v1.9.5或更高版本。

$ yum remove nginx
$ rpm -ivh http://nginx.org/packages/centos/6/noarch/RPMS/nginx-release-centos-6-0.el6.ngx.noarch.rpm
# nginx.repo

[nginx]
name=nginx repo
-baseurl=http://nginx.org/packages/centos/6/$basearch/
+baseurl=http://nginx.org/packages/mainline/centos/6/$basearch/
gpgcheck=0
enabled=1
+priority=1
$ yum install -y nginx
$ nginx -v
nginx version: nginx/1.9.15

设定

$ mkdir -p /var/www/html
$ chown -R nginx:nginx /var/www/html
$ cp /etc/nginx/nginx.conf /etc/nginx/nginx.conf.org
error_log  /var/log/nginx/error.log warn;
access_log  /var/log/nginx/access.log  main;

server {
        listen       80 default_server;
        listen       [::]:80 default_server;
        server_name  localhost;
        root        /var/www/html;
        index       index.php index.html;

        include /etc/nginx/default.d/*.conf;

        location ~ \.php$ {
            fastcgi_pass 127.0.0.1:9000;
            fastcgi_index index.php;
            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
            fastcgi_param PATH_INFO $fastcgi_script_name;
            include fastcgi_params;
        }

        location ~* ^.+.(jpg|jpeg|gif|png|css|js|flv|swf|ico|xml)$ {
                access_log  off;
                log_not_found off;
                expires 30d;
        }

}
#セッションディレクトリ
$ chown -R nginx:nginx /var/opt/remi/php70/lib/php/session/

$ service nginx start
$ service php70-php-fpm start

$ chkconfig nginx on
$ chkconfig php70-php-fpm on

当启动nginx时

nginx: [警告] 在0.0.0.0:80上存在冲突的服务器名称“localhost”,已被忽略。

因为默认设置文件和服务器名称相同而被批评。

$ mv /etc/nginx/conf.d/default.conf /etc/nginx/conf.d/default._conf

と消すか、読まれないようにする。

在浏览器上进行确认

<?php echo phpinfo();?>

如果应用基本身份验证

使用Nginx进行基本身份验证

$ yum install -y httpd-tools
$ cd /etc/nginx
$ htpasswd -c .htpasswd [ユーザー名]

适当的设置 de

server {
    location / {
        auth_basic "Restricted";
        auth_basic_user_file /etc/nginx/.htpasswd;
    }
}

WordPress –> WordPress 是一个流行的内容管理系统 (CMS) 。

安装

$ cd /var/www/html/
$ wget https://ja.wordpress.org/latest-ja.tar.gz

#zsh
# curl https://ja.wordpress.org/latest-ja.tar.gz -O

$ tar zxvf latest-ja.tar.gz 
$ rm latest-ja.tar.gz
$ cp -rpf wordpress/* ./
$ rm -rf wordpress
$ cp wp-config-sample.php wp-config.php
#wp-config.php設定
$ chown -R nginx:nginx /var/www/html/

我的便捷插件收集
管理员画面上的SSL通讯

//ログイン画面と管理画面をhttpsにリダイレクト
define('FORCE_SSL_ADMIN', true);

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

//さくらのレンタルサーバーの場合
if ( isset($_SERVER['HTTP_X_SAKURA_FORWARDED_FOR']) ) {
    $_SERVER['HTTPS'] = 'on';
}

设定

server {
        #For WordPress
        location / { 
                if (-f $request_filename) {
                        expires 30d;
                        break;
                }
                if (!-e $request_filename) {
                        rewrite ^.+?(/wp-.*) $1 last;
                        rewrite ^.+?(/.*\.php)$ $1 last;
                        rewrite ^ /index.php last;
                }
        }
}

MySQL是一种开源的关系型数据库管理系统。

安装

$ yum install -y mysql mysql-server
$ service mysqld start
$ chkconfig mysqld on

$ mysql -u root
> SET PASSWORD FOR root@localhost=PASSWORD('root');
$ service mysqld restart

phpMyAdmin (中文名:PHP数据库管理工具)

最新的版本

安装

$ cd /var/www/
$ wget https://files.phpmyadmin.net/phpMyAdmin/4.6.0/phpMyAdmin-4.6.0-all-languages.tar.gz
$ tar zxvf phpMyAdmin-4.6.0-all-languages.tar.gz
$ rm phpMyAdmin-4.6.0-all-languages.tar.gz
$ mv phpMyAdmin-4.6.0-all-languages phpmyadmin
$ cd /var/www/phpmyadmin/
$ cp config.sample.inc.php config.inc.php

设定

/* Authentication type */
$cfg['Servers'][$i]['auth_type'] = 'http';//BASIC認証

/* Server parameters */
$cfg['Servers'][$i]['host'] = 'localhost';
$cfg['Servers'][$i]['connect_type'] = 'tcp';
$cfg['Servers'][$i]['compress'] = false;

/* Select mysql if your server does not have mysqli */
$cfg['Servers'][$i]['extension'] = 'mysqli';
$cfg['Servers'][$i]['AllowNoPassword'] = false;
server {
        #For phpMyAdmin
        location ^~ /phpmyadmin {
                allow 0.0.0.0;#IP制限
                deny all;

                alias /var/www/phpmyadmin;
                index index.php;

                location ~ \.php$  {
                        fastcgi_pass    127.0.0.1:9000;
                        fastcgi_index   index.php;
                        fastcgi_split_path_info ^/phpmyadmin(.+\.php)(.*)$;
                        fastcgi_param   SCRIPT_FILENAME /var/www/phpmyadmin$fastcgi_script_name;
                        include         /etc/nginx/fastcgi_params;
                }
        }
}
$ service nginx reload

SSL (Secure Sockets Layer)

用let’s encrypt将光速的WEB服务器(nginx)进行SSL和HTTP/2化。同时将安全评估提升至A+。
nginx系列第六篇:nginx配置指南,第四节 – TLS/SSL配置
使用certbot(letsencrypt)在Amazon Linux上获取SSL证书。

server {
        listen       443 ssl;
        listen       [::]:443 ssl;
        server_name  localhost;
        root         /var/www/html;
        index        index.php index.html;

        ssl_session_timeout 1d;
        ssl_session_cache shared:SSL:60m;

        include /etc/nginx/default.d/*.conf;
}

让我们来加密

#Git無い場合はインストール
$ yum install -y git
$ cd /etc/
$ git clone https://github.com/letsencrypt/letsencrypt
#git clone https://github.com/certbot/certbot
$ cd letsencrypt
$ ./letsencrypt-auto --debug
$ ./letsencrypt-auto certonly --webroot --agree-tos -w /var/www/html -d [ドメイン] -m [メールアドレス]

截至2016年08月,虽然certbot更名,而且pip、virtualenv等多种方法尝试过,但安装仍未成功。

证书和私钥存放在/etc/letsencrypt/live/[域名]/目录下。

server {
    listen       443 ssl;

    ssl_certificate /etc/letsencrypt/live/[ドメイン]/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/[ドメイン]/privkey.pem;

}

由于有效期限为3个月,因此可以通过克隆来更新。

+0 3 3 * * /etc/letsencrypt/letsencrypt-auto certonly --webroot --agree-tos -w /var/www/html -d [ドメイン] -d [ドメイン] --renew-by-default && service nginx reload

如果要将其重定向到https

server {
    listen       80 default_server;
    listen       [::]:80 default_server;
    server_name  localhost;
    return 301 https://$host$request_uri;
}

HSTS:HTTP严格传输安全

server {
        listen 443 ssl;

        #HTTPSのみで運用する場合のみ
        add_header Strict-Transport-Security max-age=15768000;

}

完美的前向安全性(PFS)

生成需要花费时间,但是是必不可少的。

$ cd /etc/ssl
$ openssl dhparam 2048 -out dhparam.pem
server {
        listen 443 ssl;

        ssl_dhparam /etc/ssl/dhparam.pem;

}

HTTP/2 可以改善网络传输的效率和性能。

server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;
}

传输层安全(TLS)/安全套接层(SSL)

SSLv1.0、SSLv2.0、SSLv3.0已被禁用。

server {
    listen 443 ssl http2;

    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;

}

密码套件

server {
    listen 443 ssl http2;

    ssl_prefer_server_ciphers on;
    ssl_ciphers 'ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:ECDHE-RSA-DES-CBC3-SHA:ECDHE-ECDSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA';

}

OCSP 扣诏

server {
    listen 443 ssl http2;

    ssl_stapling on;
    ssl_stapling_verify on;
    ssl_trusted_certificate /etc/letsencrypt/live/[ドメイン]/fullchain.pem;
    resolver 8.8.8.8;

}

安全评估

スクリーンショット 2016-05-11 15.15.01.png

听起来很好,比什么都重要。 , bǐ .)

广告
将在 10 秒后关闭
bannerAds