安装LNMP(即Linux + Nginx + MySQL + PHP)需要以下步骤:
准备工作
-
在Linux服务器上安装必要的依赖库:
sudo apt-get update
和sudo apt-get install -y build-essential openssl libssl-dev curl wget vim
-
下载最新版的Nginx、MySQL和PHP源码包:
cd /usr/local/src
sudo wget http://nginx.org/download/nginx-1.18.0.tar.gz
sudo wget https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-8.0.21-linux-glibc2.12-x86_64.tar.xz
sudo wget https://www.php.net/distributions/php-7.4.12.tar.gz
安装Nginx
-
解压缩Nginx源码包:
sudo tar -zxvf nginx-1.18.0.tar.gz
-
进入Nginx源码目录:
cd nginx-1.18.0
-
配置编译参数:
sudo ./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module
-
编译并安装Nginx:
sudo make && sudo make install
-
启动Nginx:
sudo /usr/local/nginx/sbin/nginx
-
检查Nginx是否成功启动:在浏览器中访问服务器的IP地址或域名,如果看到“Welcome to nginx!”的页面,则说明Nginx已经正确安装并运行。
安装MySQL
-
解压缩MySQL源码包:
sudo tar -xvf mysql-8.0.21-linux-glibc2.12-x86_64.tar.xz
-
将解压后的MySQL目录改名为mysql并移动到/usr/local目录下:
sudo mv mysql-8.0.21-linux-glibc2.12-x86_64 /usr/local/mysql
-
创建MySQL相关的用户和用户组,并设置MySQL目录的访问权限:
sudo useradd mysql
sudo groupadd mysql
sudo chown -R mysql:mysql /usr/local/mysql
sudo chmod -R 755 /usr/local/mysql
- 初始化MySQL数据库:
cd /usr/local/mysql/bin
sudo ./mysqld --user=mysql --initialize --console
-
启动MySQL服务:
sudo ./mysqld_safe &
-
进入MySQL命令行:
sudo ./mysql -u root -p
,默认密码为空,直接回车即可。 -
修改MySQL root用户的初始密码:
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'your_new_password_here';
- 退出MySQL命令行并重启MySQL服务:
sudo systemctl restart mysql
安装PHP
-
解压缩PHP源码包:
sudo tar -zxvf php-7.4.12.tar.gz
-
进入PHP源码目录:
cd php-7.4.12
-
配置编译参数:
sudo ./configure --prefix=/usr/local/php \
--with-config-file-path=/usr/local/php/etc \
--enable-fpm \
--with-fpm-user=www-data \
--with-fpm-group=www-data \
--with-mysqli \
--with-pdo-mysql \
--with-openssl \
--with-zlib \
--with-jpeg \
--with-png \
--with-webp \
--with-freetype \
--enable-gd -
编译并安装PHP:
sudo make && sudo make install
-
复制PHP配置文件:
sudo cp /usr/local/php/etc/php-fpm.conf.default /usr/local/php/etc/php-fpm.conf
-
修改PHP配置文件:
sudo vim /usr/local/php/etc/php.ini
,并进行如下设置:
cgi.fix_pathinfo=0
date.timezone=Asia/Shanghai
- 配置PHP-FPM:
sudo cp /usr/local/src/php-7.4.12/sapi/fpm/php-fpm.service /lib/systemd/system/php-fpm.service
并启用开机启动启动:sudo systemctl enable php-fpm && sudo systemctl start php-fpm
配置Nginx
-
创建Nginx配置目录:
sudo mkdir /usr/local/nginx/conf/vhost
-
创建Nginx虚拟主机配置文件:
sudo vim /usr/local/nginx/conf/vhost/default.conf
,并写入以下内容:
server {
listen 80;
server_name your_domain.com;
index index.html index.php;
root /var/www/your_domain.com;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php$ {
fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
# fastcgi_pass 127.0.0.1:9000; # 若使用TCP方式连接PHP-FPM,则使用此行代码
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
-
创建网站的根目录:
sudo mkdir /var/www/your_domain.com
-
在网站根目录下创建一个测试PHP文件:
sudo vim /var/www/your_domain.com/index.php
并写入以下内容:
<?php
phpinfo();
- 重新启动Nginx服务:
sudo /usr/local/nginx/sbin/nginx -s reload
至此,LNMP的安装与配置已经完成。
示例一:在Nginx虚拟主机配置文件中增加一个新的域名
-
创建新的域名:
sudo vim /usr/local/nginx/conf/vhost/new_domain.com.conf
-
在新的域名配置文件中写入以下内容:
server {
listen 80;
server_name new_domain.com;
index index.html index.php;
root /var/www/new_domain.com;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php$ {
fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
# fastcgi_pass 127.0.0.1:9000; # 若使用TCP方式连接PHP-FPM,则使用此行代码
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
-
创建新的网站根目录:
sudo mkdir /var/www/new_domain.com
-
在新网站根目录下创建一个测试PHP文件:
sudo vim /var/www/new_domain.com/index.php
并写入以下内容:
<?php
echo "Hello World!";
-
重新启动Nginx服务:
sudo /usr/local/nginx/sbin/nginx -s reload
-
访问新的域名,应该可以看到输出了“Hello World!”的页面。
示例二:修改Nginx虚拟主机配置文件中的PHP解析方式
如果你想Nginx使用TCP socket连接PHP-FPM进程池而非本地Unix Domain Socket,则可以按照以下步骤进行修改:
-
打开Nginx虚拟主机配置文件:
sudo vim /usr/local/nginx/conf/vhost/default.conf
-
修改fastcgi_pass指令,将原来的Unix Domain Socket路径方式改为TCP方式:
fastcgi_pass 127.0.0.1:9000;
-
重新启动Nginx服务:
sudo /usr/local/nginx/sbin/nginx -s reload
此时Nginx将会通过TCP socket连接到PHP-FPM进程池。