php环境安装
php环境安装
#运维
下列配置只适合debian系统安装,并成功
一、获取相关开源程序
1、利用CentOS Linux系统自带的yum命令安装、升级所需的程序库:
sudo-s
LANG=C
yum -y install gcc gcc-c++ autoconf libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel libxml2 libxml2-devel zlib zlib-devel glibc glibc-devel glib2 glib2-devel bzip2 bzip2-devel ncurses ncurses-devel curl curl-devel e2fsprogs e2fsprogs-devel openssl openssl-devel openldap openldap-devel patch git libtool automake telnet cmake bison bind-utils ntsysv iptables iptables-services epel-release psmisc sqlite-devel wget net-tools traceroute whois
debian可以使用以下安装方法
apt install -y gcc autoconf libxml2 bzip2 curl e2fsprogs openssl patch git libtool automake telnet cmake bison iptables psmisc wget net-tools traceroute whois g++ libjpeg-tools libjpeg-dev libpng-tools libpng-dev libfreetype-dev libxml2-dev zlib1g zlib1g-dev libglib2.0-dev libbz2-dev libncurses5 libncurses5-dev e2fsprogs e2fslibs-dev libssl-dev bind9-utils libsqlite3-dev libcurl4-openssl-dev libldap-dev libsasl2-dev libonig-dev
2、下载适用CentOS程序源码包:
这里用OpenResty(也称为ngx_openresty)代替了标准的Nginx。它是一个全功能的 Web 应用服务器。它打包了标准的Nginx核心,很多的常用的第三方模块,以及它们的大多数依赖项。
从PHP 5.3.3版本起,PHP已经集成php-fpm了,不再是第三方的包了。在编译PHP时./configure的时候带 –enable-fpm参数即可开启PHP-FPM
mkdir -p /data0/software
cd /data0/software
wget https://openresty.org/download/openresty-1.21.4.1.tar.gz
wget http://cn2.php.net/distributions/php-8.1.15.tar.gz
wget http://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.17.tar.gz
wget https://libzip.org/download/libzip-1.9.2.tar.gz
二、安装PHP (FastCGI模式)
由于采用了mysqlnd,编译PHP时不再需要先编译MySQL。
oniguruma是一个处理正则表达式的库,我们之所以需要安装它,是因为在安装php7.4+的过程中,mbstring的正则表达式处理功能对这个包有依赖性,所以我们要先安装这个库
1、编译安装PHP所需的支持库
tar zxvf libiconv-1.17.tar.gz
cd /data0/software/libiconv-1.17
./configure --prefix=/usr/local
make
make install
cd ../
yum remove -y libzip
yum install -y cmake3
tar zxvf libzip-1.9.2.tar.gz
cd libzip-1.9.2
mkdir build && cd build && cmake .. && make && make install
cd ../../
wget https://github.com/kkos/oniguruma/releases/download/v6.9.8/onig-6.9.8.tar.gz -O oniguruma-6.9.8.tar.gz
tar -zxvf oniguruma-6.9.8.tar.gz
mv onig-6.9.8 oniguruma-6.9.8
cd oniguruma-6.9.8/
./configure --prefix=/usr/local --libdir=/lib64
make
make install
cd ../
2、编译安装PHP
echo /usr/local/lib >> /etc/ld.so.conf
echo /usr/local/lib64 >> /etc/ld.so.conf
ldconfig
tar zxvf php-8.1.15.tar.gz
cd php-8.1.15
export PKG_CONFIG_PATH="/usr/local/lib/pkgconfig/"
cp -frp /usr/lib64/libldap* /usr/lib #不需要
ln -s /usr/lib64/liblber* /usr/lib/ #不需要
./configure --prefix=/usr/local/webserver/php-8.1.15 --with-config-file-path=/usr/local/webserver/php-8.1.15/etc --with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd --with-iconv=/usr/local --with-zlib --enable-xml --disable-rpath --enable-bcmath --enable-shmop --enable-sysvsem --with-curl --enable-mbregex --enable-fpm --enable-mbstring --enable-gd --with-openssl --enable-pcntl --enable-sockets --with-ldap --with-ldap-sasl --enable-soap --enable-opcache --enable-exif --enable-sysvmsg --with-zip
make ZEND_EXTRA_LIBS='-liconv'
make install
cp php.ini-production /usr/local/webserver/php-8.1.15/etc/php.ini
cd ../
3、编译安装PHP扩展模块
cd /data0/software/
git clone https://github.com/nicolasff/phpredis
cd phpredis
git submodule init
git submodule update
/usr/local/webserver/php-8.1.15/bin/phpize
./configure --with-php-config=/usr/local/webserver/php-8.1.15/bin/php-config
make && make install
cd ../
cd /data0/software/
git clone https://gitee.com/swoole/swoole.git
cd swoole
/usr/local/webserver/php-8.1.15/bin/phpize
./configure --with-php-config=/usr/local/webserver/php-8.1.15/bin/php-config --enable-openssl
make
make install
cd ../
4、修改php.ini文件
手工修改:
vi /usr/local/webserver/php-8.1.15/etc/php.ini
查找php.ini中的
; extension_dir = "./"
修改为
extension_dir = "/usr/local/webserver/php-8.1.15/lib/php/extensions/no-debug-non-zts-20210902/"
注意要去掉extension_dir 前面的分号(😉
并在此行后增加以下几行,然后保存:
;extension = "memcache.so"
;extension = "imagick.so"
extension = "redis.so"
extension = "swoole.so"
查找
;cgi.fix_pathinfo=1
关于此配置可参考cgi.fix_pathinfo 修改为
cgi.fix_pathinfo=0
查找
;date.timezone =
修改为
date.timezone = Asia/Hong_Kong
说明,timezone可以到这里查找对应的timezone
sed一键修改上述配置: sed命令详解:sed
sed -i 's#;extension_dir = "./"#extension_dir = "/usr/local/webserver/php-8.1.15/lib/php/extensions/no-debug-non-zts-20210902/"\nextension = "redis.so"\nextension = "swoole.so"\n#' /usr/local/webserver/php-8.1.15/etc/php.ini
sed -i "s#;cgi.fix_pathinfo=1#cgi.fix_pathinfo=0#g" /usr/local/webserver/php-8.1.15/etc/php.ini
sed -i "s#;date.timezone =#date.timezone = Asia/Hong_Kong#g" /usr/local/webserver/php-8.1.15/etc/php.ini
6、创建www用户和组,以及供blog.abc.com和www.abc.com两个虚拟主机使用的目录:
/usr/sbin/groupadd www
/usr/sbin/useradd -g www www
mkdir -p /data0/htdocs/blog
chmod +w /data0/htdocs/blog
chown -R www:www /data0/htdocs/blog
mkdir -p /data0/htdocs/www
chmod +w /data0/htdocs/www
chown -R www:www /data0/htdocs/www
7、创建php-fpm配置文件
cd /usr/local/webserver/php-8.1.15/etc/
mv php-fpm.conf.default php-fpm.conf
vim /usr/local/webserver/php-8.1.15/etc/php-fpm.conf
修改下面几个地方
pid = run/php-fpm.pid
error_log = log/php-fpm.log
process_control_timeout = 5s
rlimit_files = 65535
rlimit_core = 0
pid:php-fpm运行时的pid文件 error_log:php-fpm运行时的日志文件 process_control_timeout:设置子进程接受主进程复用信号的超时时间 rlimit_files:最大打开的 rlimit_core:最多使用的核心数量,默认为系统分配
sed一键修改上述配置:
sed -i "s#;pid = run/php-fpm.pid#pid = run/php-fpm.pid#g" /usr/local/webserver/php-8.1.15/etc/php-fpm.conf
sed -i "s#;error_log = log/php-fpm.log#error_log = log/php-fpm.log#g" /usr/local/webserver/php-8.1.15/etc/php-fpm.conf
sed -i "s#;process_control_timeout = 0#process_control_timeout = 5s#g" /usr/local/webserver/php-8.1.15/etc/php-fpm.conf
sed -i "s#;rlimit_files = 1024#rlimit_files = 65535#g" /usr/local/webserver/php-8.1.15/etc/php-fpm.conf
sed -i "s#;rlimit_core = 0#rlimit_core = 0#g" /usr/local/webserver/php-8.1.15/etc/php-fpm.conf
创建配置文件:
cd /usr/local/webserver/php-8.1.15/etc/php-fpm.d
mv www.conf.default www.conf
vim /usr/local/webserver/php-8.1.15/etc/php-fpm.d/www.conf
需要修改的几个地方
user=www
group=www
listen.backlog = 128
pm = static
pm.max_children = 128
pm.start_servers = 20
pm.min_spare_servers = 5
pm.max_spare_servers = 35
pm.max_requests = 1024
rlimit_core = 0
catch_workers_output = yes
sed一键修改上述配置:
sed -i "s#;listen.backlog = 511#listen.backlog = 128#g" /usr/local/webserver/php-8.1.15/etc/php-fpm.d/www.conf
sed -i "s#pm = dynamic#pm = static#g" /usr/local/webserver/php-8.1.15/etc/php-fpm.d/www.conf
sed -i "s#pm.max_children = 5#pm.max_children = 16#g" /usr/local/webserver/php-8.1.15/etc/php-fpm.d/www.conf
sed -i "s#pm.start_servers = 2#pm.start_servers = 20#g" /usr/local/webserver/php-8.1.15/etc/php-fpm.d/www.conf
sed -i "s#pm.min_spare_servers = 1#pm.min_spare_servers = 5#g" /usr/local/webserver/php-8.1.15/etc/php-fpm.d/www.conf
sed -i "s#pm.max_spare_servers = 3#pm.max_spare_servers = 35#g" /usr/local/webserver/php-8.1.15/etc/php-fpm.d/www.conf
sed -i "s#;pm.max_requests = 500#pm.max_requests = 1024#g" /usr/local/webserver/php-8.1.15/etc/php-fpm.d/www.conf
sed -i "s#;rlimit_core = 0#rlimit_core = 0#g" /usr/local/webserver/php-8.1.15/etc/php-fpm.d/www.conf
sed -i "s#;catch_workers_output = yes#catch_workers_output = yes#g" /usr/local/webserver/php-8.1.15/etc/php-fpm.d/www.conf
8、启动php-cgi进程,监听127.0.0.1的9000端口,进程数为128(如果服务器内存小于3GB,可以只开启64个进程),用户为www:
拷贝php-fpm.service到/usr/lib/systemd/system/
cp /data0/software/php-8.1.15/sapi/fpm/php-fpm.service /usr/lib/systemd/system/
ulimit -SHn 65535
sed -i "s#ProtectSystem=full#ProtectSystem=false#g" /usr/lib/systemd/system/php-fpm.service
sed -i "s#php-8.1.15#php#g" /usr/lib/systemd/system/php-fpm.service
ln -s /usr/local/webserver/php-8.1.15/ /usr/local/webserver/php
systemctl daemon-reload
cp /data0/software/php-8.1.15/sapi/fpm/php-fpm.service /etc/init.d -SHn
sed -i "s#ProtectSystem=full#ProtectSystem=false#g" /etc/init.d/php-fpm.service
sed -i "s#php-8.1.15#php#g" /etc/init.d/php-fpm.service
ln -s /usr/local/webserver/php-8.1.15/ /usr/local/webserver/php
systemctl daemon-reload
启动php-fpm
systemctl start php-fpm.service
三、安装Nginx
1、安装Nginx
cd /data0/software
tar zxvf openresty-1.21.4.1.tar.gz
cd openresty-1.21.4.1
./configure --user=www --group=www --prefix=/usr/local/openresty --with-luajit --with-http_stub_status_module --with-http_ssl_module --with-http_sub_module --with-http_realip_module --with-http_v2_module
make
make install
cd ../
rm -f /usr/local/webserver/nginx
ln -s /usr/local/openresty/nginx/ /usr/local/webserver/nginx
2、创建Nginx日志目录
mkdir -p /data1/logs
chmod +w /data1/logs
chown -R www:www /data1/logs
3、创建Nginx配置文件
①、在/usr/local/webserver/nginx/conf/目录中创建nginx.conf文件:
rm -f /usr/local/webserver/nginx/conf/nginx.conf
vi /usr/local/webserver/nginx/conf/nginx.conf
输入以下内容:
user www www;
worker_processes 8;
error_log /data1/logs/nginx_error.log crit;
pid /usr/local/webserver/nginx/nginx.pid;
#Specifies the value for maximum file descriptors that can be opened by this process.
worker_rlimit_nofile 65535;
events
{
use epoll;
worker_connections 65535;
}
http
{
include mime.types;
default_type application/octet-stream;
#charset gb2312;
server_names_hash_bucket_size 128;
client_header_buffer_size 32k;
large_client_header_buffers 4 32k;
client_max_body_size 8m;
sendfile on;
tcp_nopush on;
keepalive_timeout 60;
tcp_nodelay on;
server_tokens off;
fastcgi_connect_timeout 300;
fastcgi_send_timeout 300;
fastcgi_read_timeout 300;
fastcgi_buffer_size 64k;
fastcgi_buffers 4 64k;
fastcgi_busy_buffers_size 128k;
fastcgi_temp_file_write_size 128k;
gzip on;
gzip_min_length 1k;
gzip_buffers 4 16k;
gzip_http_version 1.0;
gzip_comp_level 2;
gzip_types text/plain application/x-javascript text/css application/xml application/javascript;
gzip_vary on;
#limit_zone crawler $binary_remote_addr 10m;
log_format access '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent $upstream_response_time $request_time "$http_referer" '
'"$http_user_agent" $http_x_forwarded_for "$server_name" "$http_host"';
log_format wwwlogs '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent $upstream_response_time $request_time "$http_referer" '
'"$http_user_agent" $http_x_forwarded_for "$server_name" "$http_host"';
server
{
listen 80;
server_name blog.abc.com;
index index.html index.htm index.php;
root /data0/htdocs/blog;
#limit_conn crawler 20;
location ~ .*\.(php|php5)?$
{
#fastcgi_pass unix:/tmp/php-cgi.sock;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
include fcgi.conf;
}
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
{
expires 30d;
}
location ~ .*\.(js|css)?$
{
expires 1h;
}
access_log /data1/logs/access.log access;
}
server
{
listen 80 default;
server_name _;
index index.html index.htm index.php;
root /data0/htdocs/www;
location ~ .*\.(php|php5)?$
{
#fastcgi_pass unix:/tmp/php-cgi.sock;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
include fcgi.conf;
}
access_log /data1/logs/wwwlogs.log wwwlogs;
}
server
{
listen 80;
server_name status.blog.abc.com;
location / {
stub_status on;
access_log off;
}
}
}
②、在/usr/local/webserver/nginx/conf/目录中创建fcgi.conf文件:
vi /usr/local/webserver/nginx/conf/fcgi.conf
输入以下内容:
fastcgi_param GATEWAY_INTERFACE CGI/1.1;
fastcgi_param SERVER_SOFTWARE nginx;
fastcgi_param QUERY_STRING $query_string;
fastcgi_param REQUEST_METHOD $request_method;
fastcgi_param CONTENT_TYPE $content_type;
fastcgi_param CONTENT_LENGTH $content_length;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param SCRIPT_NAME $fastcgi_script_name;
fastcgi_param REQUEST_URI $request_uri;
fastcgi_param DOCUMENT_URI $document_uri;
fastcgi_param DOCUMENT_ROOT $document_root;
fastcgi_param SERVER_PROTOCOL $server_protocol;
fastcgi_param REMOTE_ADDR $remote_addr;
fastcgi_param REMOTE_PORT $remote_port;
fastcgi_param SERVER_ADDR $server_addr;
fastcgi_param SERVER_PORT $server_port;
fastcgi_param SERVER_NAME $server_name;
# PHP only, required if PHP was built with --enable-force-cgi-redirect
fastcgi_param REDIRECT_STATUS 200;
4、启动Nginx
vi /usr/lib/systemd/system/nginx.service
在末尾增加以下内容:
[Unit]
Description=nginx - high performance web server
Documentation=http://nginx.org/en/docs/
After=network.target
[Service]
Type=forking
PIDFile=/usr/local/webserver/nginx/nginx.pid
ExecStart=/usr/local/webserver/nginx/sbin/nginx
ExecReload=/usr/local/webserver/nginx/sbin/nginx -s reload
[Install]
WantedBy=multi-user.target
启动nginx
ln -s /usr/local/lib/libpcre.so.1 /usr/lib64/libpcre.so.1
ulimit -SHn 65535
systemctl start nginx.service
四、配置开机自动启动Nginx + PHP-FPM
开机启动nginx和PHP-FPM
systemctl enable nginx.service
systemctl enable php-fpm.service
七、在不停止Nginx服务的情况下平滑变更Nginx配置
1、修改/usr/local/webserver/nginx/conf/nginx.conf配置文件后,请执行以下命令检查配置文件是否正确:
/usr/local/webserver/nginx/sbin/nginx -t
如果屏幕显示以下两行信息,说明配置文件正确:
the configuration file /usr/local/webserver/nginx/conf/nginx.conf syntax is ok
the configuration file /usr/local/webserver/nginx/conf/nginx.conf was tested succe
2、重启:
/usr/local/webserver/nginx/sbin/nginx -s reload