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;
}
安全评估

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