通过AWS EC2设置nginx虚拟主机并启用PHP
在Apache上,使用PHP非常容易,但在nginx上需要额外的设置。
而且,每个虚拟域名都需要单独进行PHP设置。
因为无法在谷歌搜索中找到答案,所以我做了笔记。
前提:
必须以管理员权限执行。
AmazonLinux2 AMI。
安装nginx
您可以从amazon-linux-extras存储库中安装。
https://aws.amazon.com/jp/premiumsupport/knowledge-center/ec2-install-extras-library-software/
请使用哪个命令来确认安装了amazon-linux-extras 包。
$ which amazon-linux-extras
/usr/bin/amazon-linux-extras ←このように表示されればOK
将nginx启用。
通过amazon-linux-extras命令确认nginx的注册名称。
在我的环境中,注册名称是nginx1。
まずnginxの登録名を確認
$ amazon-linux-extras
nginxを有効にする
$ amazon-linux-extras enable nginx1
nginxを有効にする。インストールはyumコマンドでOK
$ yum install nginx
サーバー起動時にnginxも起動するように設定
$ systemctl enable nginx
設定できているか確認
$ systemctl list-unit-files -t service | grep nginx
enableになっていればOK
ついでにnginxのバージョンも確認
$ nginx -v
安装PHP
我們也會從亞馬遜下載這部分。
使用amazon-linux-extras指令來確認安裝的PHP版本。
在我的環境中,有php7.4版本。似乎還有一些舊版本。
まず phpのバージョンを確認
$ amazon-linux-extras
PHPを有効にする
$ amazon-linux-extras enable php7.4
PHPをインストールする
$ yum clean metadata && sudo yum install php-cli php-pdo php-fpm php-json php-mysqlnd
インストールできたか確認する
$ yum list installed php-cli php-pdo php-fpm php-json php-mysqlnd
サーバー起動時にphp-fpmも起動するように設定
$ systemctl enable php-fpm.service
設定できているか確認
$ systemctl list-unit-files -t service | grep php
enableになっていればOK
更改php-fpm的配置
listenの項目でUnixドメインソケットを利用するように設定し
PHP-FPMのworkerプロセスを実行するユーザーをnginxにします。
こうすることで、権限の違いによるエラーが起こりずらくなります。
在添加了`listen=/var/run/php-fpm/php-fpm.sock`的描述之后,我忘记删除初始值`listen=/run/php-fpm/www.sock`。添加完描述后,要确保它与初始值不相同。
- user = apache
- group = apache
- listen.owner=nobady
- listen.group=nobody
- listen=/run/php-fpm/www.sock
↑の記述を以下のように変更する
+ user = nginx
+ group = nginx
+ listen=/var/run/php-fpm/php-fpm.sock
+ listen.owner=nginx
+ listen.group=nginx
+ listen.mode=0660
确认/etc/php-fpm.d/www.conf文件。
cat と grep でコメントを除いた内容を確認できます。
cat www.conf | grep -v "^\s*$" | grep -v "^\s*;"
准备nginx多域名配置
域名:test.com
文档根目录:/var/www/html/test.com
フォルダを作成します。
mkdir -p /var/www/html/test.com
テスト用のPHPフィルを作成します。
vim /var/www/html/test.com/test.php #<?php echo 'test'; ?> などテスト用に記述
権限をnginxにします。
cd /var/www/
chown -R nginx:nginx html/
chmod -R 775 html/
在nginx中配置多域名和PHP设置。
我們要在/etc/nginx/conf.d下創建test.com.conf文件。讀取conf.d文件夾下的conf文件就像在apach中一樣。
vim /etc/nginx/conf.d/test.com.conf
在`/etx/nginx/conf.d/test.com.conf`文件中,添加以下内容:
※注意事项:
将`fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock;`修改为`/etx/php-fpm.d/www.conf`文件中的`listen=/var/run/php-fpm/php-fpm.sock`。
在使用谷歌搜索并复制粘贴时出现了偏差。
server {
listen 80;
server_name test.com;
location / {
root /var/www/html/test.com;
index index.html index.htm index.php;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
location ~ \.php$ {
root /var/www/html/test.com;
fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
确认nginx和php-fpm的语法
$ php-fpm -t
$ nginx -t
重新启动nginx和php-fpm。
只需要一个选项:
※遇到了问题
不仅需要重新启动nginx,还需要重新启动php-fpm。
$ systemctl restart nginx.service
$ systemctl restart php-fpm.service
在使用Apache时,PHP可以立即执行,但在使用Nginx时,需要进行一些设置。