LEMP学习配置环境心得

LEMP这个是国外的一种叫法,不同于国内的LAMP、LNMP一键安装包!实际上LEMP堆栈就是LNMP,E代表Engine。

以下内容以centos 8为例:

搭建前,首先要有一台服务器,甲骨文免费的可以去看看,终身免费哦!

安装:

1、NGINX

安装Nginx安装包:

sudo dnf install nginx

开启 NGINX 服务:


sudo systemctl enable nginx
sudo systemctl start nginx

2、MariaDB

MariaDB也是MySQL的一种,流行的建站软件都支持!

安装MariaDB及PHP支持

sudo dnf install mariadb-server php-mysqlnd

MariaDB 设置为在启动时启动并首次启动守护程序

sudo systemctl enable mariadb.service
sudo systemctl start mariadb.service

登录到 MariaDB 的 SQL shell

mysql -u root
完成修改登录时:mysql -u root -p

创建测试数据库和具有访问权限的用户

CREATE DATABASE testdb;
CREATE USER 'testuser' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON testdb.* TO 'testuser';

记得改为自己的想要设置的密码;

退出 SQL

quit

使用mysql_secure_installation工具配置其他安全选项。此工具将询问您是否要为MySQL根用户设置新密码,但您可以跳过该步骤:

sudo mysql_secure_installation

在以下提示下回答 Y:(自己认为有用就留着,没有用就删掉)

  • 删除匿名用户?
  • 是否允许远程根登录?
  • 删除测试数据库并对其进行访问?
  • 现在重新加载权限表?

3、PHP

安装 PHP FastCGI 处理管理器,其中包含核心 PHP 依赖项:

sudo dnf install php-fpm

启用并启动 php-fpm.service:

sudo systemctl enable php-fpm.service
sudo systemctl start php-fpm.service

将 中的默认值从 更改为 :user/etc/php-fpm.d/www.confapachenginx

File: /etc/php-fpm.d/www.conf


…
; RPM: apache user chosen to provide access to the same directories as httpd
user = nginx
; RPM: Keep a group allowed to write in log dir.
group = nginx
…

4、设置 NGINX 站点配置文件

创建网站内容所在的根目录。将 example.com 替换为您网站的网域。

sudo mkdir -p /var/www/html/example.com/public_html

将目录的所有权分配给 :$USER

 sudo chown -R $USER:$USER /var/www/html/example.com/public_html

使用 SELinux 的命令更改 Web 内容的文件安全上下文,请替换为您的域名:chcon example.com

sudo chcon -t httpd_sys_content_t /var/www/html/example.com -R
sudo chcon -t httpd_sys_rw_content_t /var/www/html/example.com -R

更新文件中 Web 内容的文档根位置。/etc/nginx/nginx.conf

File: /etc/nginx/nginx.conf

server {
    listen       80;
    listen       [::]:80;
    server_name  _;
    root         /var/www/html/example.com/public_html;

    # Load configuration files for the default server block.
    #include /etc/nginx/conf.d/*.conf; (如无必要,无需解除注释,此处是坑)

    location / {
    }

    error_page 404 /404.html;
        location = /40x.html {
    }

    error_page 500 502 503 504 /50x.html;
        location = /50x.html {
    }

在目录中为您的域创建配置文件。将 example.com 替换为文件内容中的域:

文件: /etc/nginx/conf.d/example.com.conf

    server {
    listen         80;
    listen         [::]:80;
    server_name    example.com www.example.com;
    root           /var/www/html/example.com/public_html;
    index          index.html;

    location / {
      try_files $uri $uri/ =404;
    }
    location ~* \.php$ {
      fastcgi_pass unix:/run/php-fpm/www.sock;
      include         fastcgi_params;
      fastcgi_param   SCRIPT_FILENAME    $document_root$fastcgi_script_name;
      fastcgi_param   SCRIPT_NAME        $fastcgi_script_name;
    }
}

注:Nginx对PATHINFO支持不够,如果不配置,亲身实验会造成typecho后台404的情况,解决不好,后台无法登录会显示Access denied,需要更改支持PATHINFO的主机的配置文件,php.ini也要改,默认cgi.fix_pathinfo参数是0的,我们需要改成1,然后保存退出,最后重启PHP。

官方给的解决方式是一般的出现这种情况时,nginx.conf 里的 location 设置都是类似这样

location ~ .*\.php$

要支持 pathinfo,要改成

location ~ .*\.php(\/.*)*$

在某些老版本的 php 里面,可能还要打开 php.ini 里的 cgi.fix_pathinfo

cgi.fix_pathinfo = 1

5、配置防火墙D

为 CentOS 8 启用了 FirewallD,但 HTTP 和 HTTPS 不包括在默认服务集中。

查看默认服务集:

sudo firewall-cmd --zone=public --list-services

cockpit dhcpv6-client ssh

要允许连接到NGINX,请将HTTP和HTTPS添加为服务:

 sudo firewall-cmd --zone=public --add-service=http --permanent
 sudo firewall-cmd --zone=public --add-service=https --permanent
 sudo firewall-cmd --reload

注意:此外,如果您计划在服务器上使用任何 HTTPD 脚本,请更新相应的 SELinux 布尔变量。若要允许 HTTPD 脚本和模块连接到网络,请使用命令。

sudo setsebool -P httpd_can_network_connect on

6、测试 LEMP 堆栈

要确保您的域名可以访问您的服务器,确保对DNS正确解析IP 地址。

重新启动PHP并重新加载NGINX配置:

sudo systemctl restart php-fpm
sudo nginx -s reload

测试NGINX配置:

sudo nginx -t

创建一个测试页面来验证NGINX是否可以渲染PHP并连接到MariaDB数据库

文件:/var/www/html/example.com/public_html/test.php

<html>
<head>
    <h2>LEMP Stack Test</h2>
</head>
    <body>
    <?php echo '<p>Hello,</p>';

    // Define PHP variables for the MySQL connection.
    $servername = "localhost";
    $username = "testuser";
    $password = "password";

    // Create a MySQL connection.
    $conn = mysqli_connect($servername, $username, $password);

    // Report if the connection fails or is successful.
    if (!$conn) {
        exit('<p>Your connection has failed.<p>' .  mysqli_connect_error());
    }
    echo '<p>You have connected successfully.</p>';
    ?>
</body>
</html>

注:记得换成自己的数据名字和密码哦!

转到浏览器实验,地址:http://example.com/test.php

看看是否成功:

如果您看到错误消息或页面根本没有加载,请重新检查您的配置。

完结散花!

7、DEMO

演示站:iesome.com (撸的Oracle 云主机,好像是终身免费来着,不要白不要哈哈,小鸡编译性能差,尽量手动安装哈!)

浊以静之徐清,安以动之徐生

你也可能喜欢

发表评论

插入图片
返回顶部

微信扫一扫

微信扫一扫