Nginx 与 PHP
![]() PHP5 已在 3.9 版本中移除。PHP7 不在 3.16 或更高版本的仓库中。(讨论) |
Nginx (engine x) 是一个 HTTP 和反向代理服务器、邮件代理服务器以及通用的 TCP/UDP 代理服务器
安装
Nginx 软件包在 Alpine Linux 仓库中可用。要安装它,请运行
apk update apk add nginx
为 nginx 创建新的用户和组 'www'
adduser -D -g 'www' www
创建一个用于 html 文件的目录
mkdir /www chown -R www:www /var/lib/nginx chown -R www:www /www
配置
您可能需要在编写自己的配置文件之前备份原始的 nginx.conf 文件
mv /etc/nginx/nginx.conf /etc/nginx/nginx.conf.orig
配置 Nginx 监听端口 80 并处理 .html 或 .htm 文件
vi /etc/nginx/nginx.conf
user www; worker_processes auto; # it will be determinate automatically by the number of core error_log /var/log/nginx/error.log warn; #pid /var/run/nginx/nginx.pid; # it permit you to use rc-service nginx reload|restart|stop|start events { worker_connections 1024; } http { include /etc/nginx/mime.types; default_type application/octet-stream; sendfile on; access_log /var/log/nginx/access.log; keepalive_timeout 3000; server { listen 80; root /www; index index.html index.htm; server_name localhost; client_max_body_size 32m; error_page 500 502 503 504 /50x.html; location = /50x.html { root /var/lib/nginx/html; } } }
示例页面
vi /www/index.html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8" /> <title>HTML5</title> </head> <body> Server is online </body> </html>
控制 nginx
启动 Nginx
安装后,Nginx 默认不运行。要启动 Nginx,请使用 start 命令。
rc-service nginx start
您将获得关于状态的反馈。
* Caching service dependencies ... [ ok ] * /run/nginx: creating directory * /run/nginx: correcting owner * Starting nginx ... [ ok ]
测试配置
当您对 nginx 配置文件进行任何更改后,您应该在重启/重新加载 nginx 之前检查是否存在错误。
这将检查任何重复配置、语法错误等。要执行此操作,请运行
nginx -t
您将获得反馈,指示是否失败。如果一切正常,您将看到以下内容,然后可以继续重新加载 nginx 服务器。
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful
重新加载和重启 Nginx
在向 nginx 发送重新加载配置的命令或重启之前,对配置文件所做的更改将不会应用。
重新加载将执行配置的“热重载”,而不会导致服务器停机。它将使用新配置启动新的工作进程,并优雅地关闭旧的工作进程。如果您有待处理的请求,这些请求将在旧的工作进程死亡之前由其处理,因此这是一种非常优雅的重新加载配置的方式。如果您想重新加载 Web 服务器,请使用 reload 命令。
rc-service nginx reload
如果您想重启 Web 服务器,请使用 restart 命令。
rc-service nginx restart
停止 Nginx
如果您想停止 Web 服务器,请使用 stop 命令。
rc-service nginx stop
运行级别
通常,您希望在系统启动时启动 Web 服务器。这可以通过将 Nginx 添加到所需的运行级别来完成。
rc-update add nginx default
现在,Nginx 应该在您下次启动机器时自动启动。要测试,请运行
reboot
为了确保 Nginx 已启动,请运行
ps aux | grep nginx
您应该得到类似这样的结果
263 root 0:00 nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf 264 www 0:00 nginx: worker process 310 root 0:00 grep nginx
测试 Nginx
本节假设 nginx 正在运行,并且已创建示例 html 页面 "/www/index.html"。启动 Web 浏览器并将其指向您的 Web 服务器。您应该得到
Server is online
故障排除
如果 Nginx 没有启动,请检查 Nginx 日志文件
less /var/log/nginx/error.log
确保配置文件不包含错误。如果有任何错误,请编辑该文件。
nginx -t vi /etc/nginx/nginx.conf
Nginx 与 PHP
设置带有 PHP5 的 Nginx
设置带有 PHP7 的 Nginx
设置带有 acme (Let's Encrypt) 的 Nginx 作为反向代理
PHP8.2 安装
PHP 软件包在 Alpine Linux 仓库中可用。要安装带有模块的 php8.2,请运行
apk add php82-fpm php82-soap php82-openssl php82-gmp php82-pdo_odbc php82-json php82-dom php82-pdo php82-zip php82-mysqli php82-sqlite3 php82-apcu php82-pdo_pgsql php82-bcmath php82-gd php82-odbc php82-pdo_mysql php82-pdo_sqlite php82-gettext php82-xmlreader php82-bz2 php82-iconv php82-pdo_dblib php82-curl php82-ctype
也许您不需要所有这些 PHP 模块。根据您的需要安装模块。
PHP8.2 配置
定义将在配置中使用的 ENV 变量。您可以例如在 /etc/profile.d/php82.sh 中执行此操作。
PHP_FPM_USER="www" PHP_FPM_GROUP="www" PHP_FPM_LISTEN_MODE="0660" PHP_MEMORY_LIMIT="512M" PHP_MAX_UPLOAD="50M" PHP_MAX_FILE_UPLOAD="200" PHP_MAX_POST="100M" PHP_DISPLAY_ERRORS="On" PHP_DISPLAY_STARTUP_ERRORS="On" PHP_ERROR_REPORTING="E_COMPILE_ERROR\|E_RECOVERABLE_ERROR\|E_ERROR\|E_CORE_ERROR" PHP_CGI_FIX_PATHINFO=0
根据您的需要修改变量。
修改配置文件 www.conf
sed -i "s|;listen.owner\s*=\s*nobody|listen.owner = ${PHP_FPM_USER}|g" /etc/php82/php-fpm.d/www.conf sed -i "s|;listen.group\s*=\s*nobody|listen.group = ${PHP_FPM_GROUP}|g" /etc/php82/php-fpm.d/www.conf sed -i "s|;listen.mode\s*=\s*0660|listen.mode = ${PHP_FPM_LISTEN_MODE}|g" /etc/php82/php-fpm.d/www.conf sed -i "s|user\s*=\s*nobody|user = ${PHP_FPM_USER}|g" /etc/php82/php-fpm.d/www.conf sed -i "s|group\s*=\s*nobody|group = ${PHP_FPM_GROUP}|g" /etc/php82/php-fpm.d/www.conf sed -i "s|;log_level\s*=\s*notice|log_level = notice|g" /etc/php82/php-fpm.d/www.conf #取消注释行
修改配置文件 php.ini
sed -i "s|display_errors\s*=\s*Off|display_errors = ${PHP_DISPLAY_ERRORS}|i" /etc/php82/php.ini sed -i "s|display_startup_errors\s*=\s*Off|display_startup_errors = ${PHP_DISPLAY_STARTUP_ERRORS}|i" /etc/php82/php.ini sed -i "s|error_reporting\s*=\s*E_ALL & ~E_DEPRECATED & ~E_STRICT|error_reporting = ${PHP_ERROR_REPORTING}|i" /etc/php82/php.ini sed -i "s|;*memory_limit =.*|memory_limit = ${PHP_MEMORY_LIMIT}|i" /etc/php82/php.ini sed -i "s|;*upload_max_filesize =.*|upload_max_filesize = ${PHP_MAX_UPLOAD}|i" /etc/php82/php.ini sed -i "s|;*max_file_uploads =.*|max_file_uploads = ${PHP_MAX_FILE_UPLOAD}|i" /etc/php82/php.ini sed -i "s|;*post_max_size =.*|post_max_size = ${PHP_MAX_POST}|i" /etc/php82/php.ini sed -i "s|;*cgi.fix_pathinfo=.*|cgi.fix_pathinfo= ${PHP_CGI_FIX_PATHINFO}|i" /etc/php82/php.ini
要向 Nginx 添加 PHP 支持,我们应该修改 Nginx 配置文件
vi /etc/nginx/nginx.conf
user www; worker_processes 1; error_log /var/log/nginx/error.log warn; pid /var/run/nginx/nginx.pid; events { worker_connections 1024; } http { include /etc/nginx/mime.types; default_type application/octet-stream; sendfile on; access_log /var/log/nginx/access.log; keepalive_timeout 3000; server { listen 80; root /www; index index.php index.html index.htm; server_name localhost; client_max_body_size 32m; error_page 500 502 503 504 /50x.html; location = /50x.html { root /var/lib/nginx/html; } location ~ \.php$ { fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; include fastcgi.conf; } } }
在我们的配置中,我们有行:"fastcgi_pass 127.0.0.1:9000"
它应该与 PHP 配置文件 /etc/php82/php-fpm.d/www.conf 中的行 "listen = 127.0.0.1:9000" 相对应
时区
对于配置时区,您可以使用 tzdata 软件包,可以通过运行以下命令安装
apk add tzdata
时区配置
TIMEZONE="Europe/Helsinki" cp /usr/share/zoneinfo/${TIMEZONE} /etc/localtime echo "${TIMEZONE}" > /etc/timezone sed -i "s|;*date.timezone =.*|date.timezone = ${TIMEZONE}|i" /etc/php82/php.ini
示例 PHP 页面
vi /www/phpinfo.php
<?php phpinfo(); ?>
启动带有 PHP82 的 Nginx
Nginx 应该重启,因为我们更改了它的配置。通过运行以下命令重启它
rc-service nginx restart
安装后,PHP 默认不运行。通过运行以下命令启动它
rc-service php-fpm82 start
运行级别
通常,您希望在系统启动时启动 Web 服务器。这可以通过将 Nginx 和 PHP 添加到所需的运行级别来完成。
rc-update add nginx default rc-update add php-fpm82 default
现在,它们应该在您下次启动机器时自动启动。要测试,请运行
reboot
为了确保 Nginx 和 PHP 已启动,请运行命令
ps aux | grep 'nginx\|php-fpm'
您应该得到类似这样的结果
263 root 0:00 nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf 264 www 0:00 nginx: worker process 291 root 0:00 php-fpm: master process (/etc/php82/php-fpm.conf) 302 www 0:00 php-fpm: pool www 303 www 0:00 php-fpm: pool www 310 root 0:00 grep nginx\|php-fpm
测试带有 PHP 的 Nginx
本节假设 nginx 正在运行,并且已创建示例 html 页面 "/www/phpinfo.php"。启动 Web 浏览器并指向
http://X.X.X.X/phpinfo.php
其中 X.X.X.X 是您的 Web 服务器的 IP 地址
如果一切设置正确,您应该看到有关您的 Web 服务器的信息。
故障排除
如果 PHP 没有启动,请检查 php-fpm 日志文件
less /var/log/php-fpm.log
确保配置文件不包含错误
vi /etc/php82/php-fpm.conf vi /etc/php82/php.ini
PHP7 安装
PHP 软件包在 Alpine Linux 仓库中可用。要安装带有模块的 php7,请运行
apk add php7-fpm php7-mcrypt php7-soap php7-openssl php7-gmp php7-pdo_odbc php7-json php7-dom php7-pdo php7-zip php7-mysqli php7-sqlite3 php7-apcu php7-pdo_pgsql php7-bcmath php7-gd php7-odbc php7-pdo_mysql php7-pdo_sqlite php7-gettext php7-xmlreader php7-xmlrpc php7-bz2 php7-iconv php7-pdo_dblib php7-curl php7-ctype
也许您不需要所有这些 PHP 模块。根据您的需要安装模块。
PHP7 配置
定义将在配置中使用的 ENV 变量。您可以例如在 /etc/profile.d/php7.sh 中执行此操作。
PHP_FPM_USER="www" PHP_FPM_GROUP="www" PHP_FPM_LISTEN_MODE="0660" PHP_MEMORY_LIMIT="512M" PHP_MAX_UPLOAD="50M" PHP_MAX_FILE_UPLOAD="200" PHP_MAX_POST="100M" PHP_DISPLAY_ERRORS="On" PHP_DISPLAY_STARTUP_ERRORS="On" PHP_ERROR_REPORTING="E_COMPILE_ERROR\|E_RECOVERABLE_ERROR\|E_ERROR\|E_CORE_ERROR" PHP_CGI_FIX_PATHINFO=0
根据您的需要修改变量。
修改配置文件 www.conf
sed -i "s|;listen.owner\s*=\s*nobody|listen.owner = ${PHP_FPM_USER}|g" /etc/php7/php-fpm.d/www.conf sed -i "s|;listen.group\s*=\s*nobody|listen.group = ${PHP_FPM_GROUP}|g" /etc/php7/php-fpm.d/www.conf sed -i "s|;listen.mode\s*=\s*0660|listen.mode = ${PHP_FPM_LISTEN_MODE}|g" /etc/php7/php-fpm.d/www.conf sed -i "s|user\s*=\s*nobody|user = ${PHP_FPM_USER}|g" /etc/php7/php-fpm.d/www.conf sed -i "s|group\s*=\s*nobody|group = ${PHP_FPM_GROUP}|g" /etc/php7/php-fpm.d/www.conf sed -i "s|;log_level\s*=\s*notice|log_level = notice|g" /etc/php7/php-fpm.d/www.conf #取消注释行
修改配置文件 php.ini
sed -i "s|display_errors\s*=\s*Off|display_errors = ${PHP_DISPLAY_ERRORS}|i" /etc/php7/php.ini sed -i "s|display_startup_errors\s*=\s*Off|display_startup_errors = ${PHP_DISPLAY_STARTUP_ERRORS}|i" /etc/php7/php.ini sed -i "s|error_reporting\s*=\s*E_ALL & ~E_DEPRECATED & ~E_STRICT|error_reporting = ${PHP_ERROR_REPORTING}|i" /etc/php7/php.ini sed -i "s|;*memory_limit =.*|memory_limit = ${PHP_MEMORY_LIMIT}|i" /etc/php7/php.ini sed -i "s|;*upload_max_filesize =.*|upload_max_filesize = ${PHP_MAX_UPLOAD}|i" /etc/php7/php.ini sed -i "s|;*max_file_uploads =.*|max_file_uploads = ${PHP_MAX_FILE_UPLOAD}|i" /etc/php7/php.ini sed -i "s|;*post_max_size =.*|post_max_size = ${PHP_MAX_POST}|i" /etc/php7/php.ini sed -i "s|;*cgi.fix_pathinfo=.*|cgi.fix_pathinfo= ${PHP_CGI_FIX_PATHINFO}|i" /etc/php7/php.ini
要向 Nginx 添加 PHP 支持,我们应该修改 Nginx 配置文件
vi /etc/nginx/nginx.conf
user www; worker_processes 1; error_log /var/log/nginx/error.log warn; pid /var/run/nginx/nginx.pid; events { worker_connections 1024; } http { include /etc/nginx/mime.types; default_type application/octet-stream; sendfile on; access_log /var/log/nginx/access.log; keepalive_timeout 3000; server { listen 80; root /www; index index.html index.htm index.php; server_name localhost; client_max_body_size 32m; error_page 500 502 503 504 /50x.html; location = /50x.html { root /var/lib/nginx/html; } location ~ \.php$ { fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; include fastcgi.conf; } } }
在我们的配置中,我们有行:"fastcgi_pass 127.0.0.1:9000"
它应该与 PHP 配置文件 /etc/php7/php-fpm.d/www.conf 中的行 "listen = 127.0.0.1:9000" 相对应
时区
对于配置时区,您可以使用 tzdata 软件包,可以通过运行以下命令安装
apk add tzdata
时区配置
TIMEZONE="Europe/Helsinki" cp /usr/share/zoneinfo/${TIMEZONE} /etc/localtime echo "${TIMEZONE}" > /etc/timezone sed -i "s|;*date.timezone =.*|date.timezone = ${TIMEZONE}|i" /etc/php7/php.ini
示例 PHP 页面
vi /www/phpinfo.php
<?php phpinfo(); ?>
启动带有 PHP7 的 Nginx
Nginx 应该重启,因为我们更改了它的配置。通过运行以下命令重启它
rc-service nginx restart
安装后,PHP 默认不运行。通过运行以下命令启动它
rc-service php-fpm7 start
运行级别
通常,您希望在系统启动时启动 Web 服务器。这可以通过将 Nginx 和 PHP 添加到所需的运行级别来完成。
rc-update add nginx default rc-update add php-fpm7 default
现在,它们应该在您下次启动机器时自动启动。要测试,请运行
reboot
为了确保 Nginx 和 PHP 已启动,请运行命令
ps aux | grep 'nginx\|php-fpm'
您应该得到类似这样的结果
263 root 0:00 nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf 264 www 0:00 nginx: worker process 291 root 0:00 php-fpm: master process (/etc/php7/php-fpm.conf) 302 www 0:00 php-fpm: pool www 303 www 0:00 php-fpm: pool www 310 root 0:00 grep nginx\|php-fpm
测试带有 PHP 的 Nginx
本节假设 nginx 正在运行,并且已创建示例 html 页面 "/www/phpinfo.php"。启动 Web 浏览器并指向
http://X.X.X.X/phpinfo.php
其中 X.X.X.X 是您的 Web 服务器的 IP 地址
如果一切设置正确,您应该看到有关您的 Web 服务器的信息。
故障排除
如果 PHP 没有启动,请检查 php-fpm 日志文件
less /var/log/php-fpm.log
确保配置文件不包含错误
vi /etc/php7/php-fpm.conf vi /etc/php7/php.ini
PHP5 安装
PHP 软件包在 Alpine Linux 仓库中可用。要安装带有模块的 php5,请运行
apk add php5-fpm php5-mcrypt php5-soap php5-openssl php5-gmp php5-pdo_odbc php5-json php5-dom php5-pdo php5-zip php5-mysql php5-mysqli php5-sqlite3 php5-apcu php5-pdo_pgsql php5-bcmath php5-gd php5-xcache php5-odbc php5-pdo_mysql php5-pdo_sqlite php5-gettext php5-xmlreader php5-xmlrpc php5-bz2 php5-memcache php5-mssql php5-iconv php5-pdo_dblib php5-curl php5-ctype
也许您不需要所有这些 PHP 模块。根据您的需要安装模块。
PHP5 配置
定义将在配置中使用的 ENV 变量。您可以例如在 /etc/profile.d/php5.sh 中执行此操作。
PHP_FPM_USER="www" PHP_FPM_GROUP="www" PHP_FPM_LISTEN_MODE="0660" PHP_MEMORY_LIMIT="512M" PHP_MAX_UPLOAD="50M" PHP_MAX_FILE_UPLOAD="200" PHP_MAX_POST="100M" PHP_DISPLAY_ERRORS="On" PHP_DISPLAY_STARTUP_ERRORS="On" PHP_ERROR_REPORTING="E_COMPILE_ERROR\|E_RECOVERABLE_ERROR\|E_ERROR\|E_CORE_ERROR" PHP_CGI_FIX_PATHINFO=0
根据您的需要修改变量。
修改配置文件 php-fpm.conf
sed -i "s|;listen.owner\s*=\s*nobody|listen.owner = ${PHP_FPM_USER}|g" /etc/php5/php-fpm.conf sed -i "s|;listen.group\s*=\s*nobody|listen.group = ${PHP_FPM_GROUP}|g" /etc/php5/php-fpm.conf sed -i "s|;listen.mode\s*=\s*0660|listen.mode = ${PHP_FPM_LISTEN_MODE}|g" /etc/php5/php-fpm.conf sed -i "s|user\s*=\s*nobody|user = ${PHP_FPM_USER}|g" /etc/php5/php-fpm.conf sed -i "s|group\s*=\s*nobody|group = ${PHP_FPM_GROUP}|g" /etc/php5/php-fpm.conf sed -i "s|;log_level\s*=\s*notice|log_level = notice|g" /etc/php5/php-fpm.conf #取消注释行
修改配置文件 php.ini
sed -i "s|display_errors\s*=\s*Off|display_errors = ${PHP_DISPLAY_ERRORS}|i" /etc/php5/php.ini sed -i "s|display_startup_errors\s*=\s*Off|display_startup_errors = ${PHP_DISPLAY_STARTUP_ERRORS}|i" /etc/php5/php.ini sed -i "s|error_reporting\s*=\s*E_ALL & ~E_DEPRECATED & ~E_STRICT|error_reporting = ${PHP_ERROR_REPORTING}|i" /etc/php5/php.ini sed -i "s|;*memory_limit =.*|memory_limit = ${PHP_MEMORY_LIMIT}|i" /etc/php5/php.ini sed -i "s|;*upload_max_filesize =.*|upload_max_filesize = ${PHP_MAX_UPLOAD}|i" /etc/php5/php.ini sed -i "s|;*max_file_uploads =.*|max_file_uploads = ${PHP_MAX_FILE_UPLOAD}|i" /etc/php5/php.ini sed -i "s|;*post_max_size =.*|post_max_size = ${PHP_MAX_POST}|i" /etc/php5/php.ini sed -i "s|;*cgi.fix_pathinfo=.*|cgi.fix_pathinfo= ${PHP_CGI_FIX_PATHINFO}|i" /etc/php5/php.ini
要向 Nginx 添加 PHP 支持,我们应该修改 Nginx 配置文件
vi /etc/nginx/nginx.conf
user www; worker_processes 1; error_log /var/log/nginx/error.log warn; pid /var/run/nginx/nginx.pid; events { worker_connections 1024; } http { include /etc/nginx/mime.types; default_type application/octet-stream; sendfile on; access_log /var/log/nginx/access.log; keepalive_timeout 3000; server { listen 80; root /www; index index.html index.htm index.php; server_name localhost; client_max_body_size 32m; error_page 500 502 503 504 /50x.html; location = /50x.html { root /var/lib/nginx/html; } location ~ \.php$ { fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; include fastcgi.conf; } } }
在我们的配置中,我们有行:"fastcgi_pass 127.0.0.1:9000"
它应该与 PHP 配置文件 /etc/php5/php-fpm.conf 中的行 "listen = 127.0.0.1:9000" 相对应
时区
对于配置时区,您可以使用 tzdata 软件包,可以通过运行以下命令安装
apk add tzdata
时区配置
TIMEZONE="Europe/Helsinki" cp /usr/share/zoneinfo/${TIMEZONE} /etc/localtime echo "${TIMEZONE}" > /etc/timezone sed -i "s|;*date.timezone =.*|date.timezone = ${TIMEZONE}|i" /etc/php5/php.ini
示例 PHP 页面
vi /www/phpinfo.php
<?php phpinfo(); ?>
启动带有 PHP5 的 Nginx
Nginx 应该重启,因为我们更改了它的配置。通过运行以下命令重启它
rc-service nginx restart
安装后,PHP 默认不运行。通过运行以下命令启动它
rc-service php-fpm start
运行级别
通常,您希望在系统启动时启动 Web 服务器。这可以通过将 Nginx 和 PHP 添加到所需的运行级别来完成。
rc-update add nginx default rc-update add php-fpm default
现在,它们应该在您下次启动机器时自动启动。要测试,请运行
reboot
为了确保 Nginx 和 PHP 已启动,请运行命令
ps aux | grep 'nginx\|php-fpm'
您应该得到类似这样的结果
263 root 0:00 nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf 264 www 0:00 nginx: worker process 291 root 0:00 php-fpm: master process (/etc/php5/php-fpm.conf) 302 www 0:00 php-fpm: pool www 303 www 0:00 php-fpm: pool www 310 root 0:00 grep nginx\|php-fpm
测试带有 PHP 的 Nginx
本节假设 nginx 正在运行,并且已创建示例 html 页面 "/www/phpinfo.php"。启动 Web 浏览器并指向
http://X.X.X.X/phpinfo.php
其中 X.X.X.X 是您的 Web 服务器的 IP 地址
如果一切设置正确,您应该看到有关您的 Web 服务器的信息。
故障排除
如果 PHP 没有启动,请检查 php-fpm 日志文件
less /var/log/php-fpm.log
确保配置文件不包含错误
vi /etc/php5/php-fpm.conf vi /etc/php5/php.ini