Nginx(四)

news2025/1/11 18:47:29

部署LNMP架构动态网站WordPress

LNMP=Linux+Nginx+MySQL+Php

环境

192.168.29.141centos8Nginx1.24.0
192.168.29.142centos8MySQL8.0.33
192.168.29.143centos8Php7.2.24

关闭firewalld

systemctl stop firewalld
systemctl disable firewalld

关闭selinux

setenforce 0
sed -ir 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config &> /dev/null

部署Nginx

#先决条件
[root@nginx ~]#yum -y install yum-utils
 
#配置nginx官方yum源
[root@nginx ~]#vim /etc/yum.repos.d/nginx.repo
[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true
 
[nginx-mainline]
name=nginx mainline repo
baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/
gpgcheck=1
enabled=0
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true
 
#安装
[root@nginx ~]#yum -y install nginx
 
#查看版本
[root@nginx ~]#nginx -v
nginx version: nginx/1.24.0

#新建用户www
[root@nginx ~]#useradd www -s /sbin/nologin -M

#修改nginx启动用户
[root@nginx ~]#vim /etc/nginx/nginx.conf
user=www www
...

#新建配置文件
[root@nginx ~]#vim /etc/nginx/conf.d/wordpress.conf
server {
    listen       80;
    server_name  myblog.com;

    access_log  /var/log/nginx/host.access.log  main;

    location / {
        root   /www/wordpress;
        index  index.php index.html index.htm;
    }

    #error_page  404              /404.html;

    # redirect server error pages to the static page /50x.html
    #
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }

    # proxy the PHP scripts to Apache listening on 127.0.0.1:80
    #
    #location ~ \.php$ {
    #    proxy_pass   http://127.0.0.1;
    #}
 # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
    #
    location ~ \.php$ {
        root           /www/wordpress;
        fastcgi_pass   192.168.29.143:9000;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
        include        fastcgi_params;
    }

    # deny access to .htaccess files, if Apache's document root
    # concurs with nginx's one
    #
    #location ~ /\.ht {
    #    deny  all;
    #}
}

[root@nginx ~]systemctl restart nginx
[root@nginx ~]systemctl enable nginx
[root@nginx ~]#ps aux | grep nginx
root        2936  0.0  0.1  41492   944 ?        Ss   00:48   0:00 nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf
www         2937  0.0  0.6  72632  5132 ?        S    00:48   0:00 nginx: worker process
root        2976  0.0  0.1 221924  1120 pts/0    R+   00:52   0:00 grep --color=auto nginx

location ~ \.php${...}中,

nginx的fastcgi_param默认为SCRIPT_FILENAME /scripts$fastcgi_script_name; 当php部署完成后,访问192.168.29.141/index.php会提示file not found。将/script替换为$document_root即可,指使用location / {...}中root指定的路径。

部署MySQL

[root@mysql ~]#wget https://repo.mysql.com//mysql80-community-release-el8-5.noarch.rpm
[root@mysql ~]#yum -y install mysql80-community-release-el8-5.noarch.rpm
[root@mysql ~]#ls /etc/yum.repos.d/
CentOS-Base.repo                CentOS-Devel.repo               CentOS-Media.repo               mysql-community-debuginfo.repo  
CentOS-centosplus.repo          CentOS-Extras.repo              CentOS-PowerTools.repo          mysql-community.repo            
CentOS-CR.repo                  CentOS-fasttrack.repo           CentOS-Sources.repo             mysql-community-source.repo     
CentOS-Debuginfo.repo           CentOS-HA.repo                  CentOS-Vault.repo               nginx.repo

#(仅限 EL8 系统)基于 EL8 的系统(例如 RHEL8 和 Oracle Linux 8)包括默认启用的 MySQL 模块。除非禁用此模块,否则它会屏蔽 MySQL 存储库提供的包
[root@mysql ~]#yum -y module disable mysql
[root@mysql ~]#yum install -y mysql-community-server
[root@mysql ~]#mysql --version
mysql  Ver 8.0.33 for Linux on x86_64 (MySQL Community Server - GPL)

#启动mysql服务并设置为开机启动
[root@mysql ~]#systemctl start mysqld.service 
[root@mysql ~]#systemctl enable mysqld

#查询mysql数据库默认密码
[root@mysql ~]#grep "password" /var/log/mysqld.log 
2023-05-14T02:45:28.175684Z 6 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: <.XMel1ukpiw
#修改mysql密码
[root@mysql ~]#mysqladmin -uroot -p'<.XMel1ukpiw' password 'Admin.123'
mysqladmin: [Warning] Using a password on the command line interface can be insecure.
Warning: Since password will be sent to server in plain text, use ssl connection to ensure password safety.
#登录数据库
[root@mysql ~]#mysql -uroot -p'Admin.123'
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 9
Server version: 8.0.33 MySQL Community Server - GPL

Copyright (c) 2000, 2023, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
4 rows in set (0.00 sec)
#创建网站数据库
mysql> create database wordpress;
Query OK, 1 row affected (0.00 sec)
#创建php登录数据库的用户
mysql> create user 'zhangsan'@'192.168.29.143' identified by 'Admin.123';
Query OK, 0 rows affected (0.01 sec)
#给新用户授权
mysql> grant all privileges on wordpress.* to 'zhangsan'@'192.168.29.143';
Query OK, 0 rows affected (0.01 sec)
#刷新权限
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec) 
mysql> show grants for zhangsan@'192.168.29.143';
+----------------------------------------------------------------------+
| Grants for zhangsan@192.168.29.143                                   |
+----------------------------------------------------------------------+
| GRANT USAGE ON *.* TO `zhangsan`@`192.168.29.143`                    |
| GRANT ALL PRIVILEGES ON `wordpress`.* TO `zhangsan`@`192.168.29.143` |
+----------------------------------------------------------------------+
2 rows in set (0.00 sec)      
#mysql8.0启用了新的密码认证插件caching_sha2_password,为了和php适配,修改密码认证插件为旧版的mysql_native_password
mysql> alter user 'zhangsan'@'192.168.29.143' identified with mysql_native_password by 'Admin.123';
Query OK, 0 rows affected (0.02 sec)

mysql> flush privileges;
Query OK, 0 rows affected (0.01 sec)


[root@mysql ~]#netstat -tnlp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      914/sshd            
tcp6       0      0 :::22                   :::*                    LISTEN      914/sshd            
tcp6       0      0 :::33060                :::*                    LISTEN      4165/mysqld         
tcp6       0      0 :::3306                 :::*                    LISTEN      4165/mysqld      

部署PHP

[root@php ~]#yum -y install php-fpm php-mysqlnd php-gd php-json.x86_64
#新建用户www
[root@nginx ~]#useradd www -s /sbin/nologin -M
#因为nginx和php不在同一台服务器上,启用tcp通讯模式
[root@php ~]#vim /etc/php-fpm.d/www.conf
...
user = www
group = www
; Note: This value is mandatory.
listen = /run/php-fpm/www.sock
listen = 0.0.0.0:9000
...
; Default Value: any
#将下行注释掉,启动默认值any
;listen.allowed_clients = 127.0.0.1
...

#创建index.php文件
[root@php ~]#vim /usr/share/nginx/html/index.php 
<?php
phpinfo();
?>
#创建mysql.php文件,测试数据库连接
[root@php ~]#vim /usr/share/nginx/html/mysql.php 
<?php
$servername = "192.168.29.142";  
$username = "zhangsan";   //定义数据库用户名
$passwd = "Admin.123";   //定义数据库密码
#注意:php7版本之后mysql_connect已被废弃,使用mysqli_connect替代
$conntest = mysqli_connect($servername,$username,$passwd);  
if($conntest) { 
   echo "连接成功"; 
} 
?>

[root@php ~]#systemctl start php-fpm.service 
[root@php ~]#systemctl enable php-fpm.service 
[root@php ~]#ps aux | grep php
root        2557  0.0  2.4 428032 20236 ?        Ss   01:58   0:00 php-fpm: master process (/etc/php-fpm.conf)
www         2558  0.0  1.4 443232 11992 ?        S    01:58   0:00 php-fpm: pool www
www         2559  0.0  1.4 443232 11992 ?        S    01:58   0:00 php-fpm: pool www
www         2560  0.0  1.4 443232 11992 ?        S    01:58   0:00 php-fpm: pool www
www         2561  0.0  1.4 443232 11992 ?        S    01:58   0:00 php-fpm: pool www
www         2562  0.0  1.4 443232 11992 ?        S    01:58   0:00 php-fpm: pool www
root        2572  0.0  0.1 221924  1176 pts/0    R+   01:58   0:00 grep --color=auto php

PHP相关配置

核心配置文件——/etc/php.ini

date.timezone = PRC   设置php时区,PRC是中国

open_basedir   设置PHP脚本允许访问的目录;它将PHP所能打开的文件限制在指定的目录树中,包括文件本身。当程序要使用例如fopen()或file_get_contents()打开一个文件时,这个文件的位置将会被检查。当文件在指定的目录树之外,程序将拒绝打开。

全局配置文件——/etc/php-fpm.conf

pid = /run/php-fpm/php-fpm.pid   设置pid文件位置

error_log = /var/log/php-fpm/error.log   设置错误日志文件位置

log_level = notice   记录日志的等级。alert(必须立即处理), error(错误情况), warning(警告情况), notice(一般重要信息), debug(调试信息). 默认: notice.

process.max = 128   默认无设置;控制子进程最大数的全局变量, 后边的设置子进程数量的指令受到这个值的限制, 0表示无限制。

daemonize = yes   将fpm转至后台运行

拓展配置文件——/etc/php-fpm.d/www.conf

user = www   设置php-fpm启动用户和组

listen.allowed_clients = 127.0.0.1   允许访问FastCGI进程的IP,设置any为不限制IP,如果要设置其他主机的nginx也能访问这台FPM进程,listen处要设置成本地可被访问的IP。默认值是any。每个地址是用逗号分隔. 如果没有设置或者为空,则允许任何服务器请求连接

listen = 127.0.0.1:9000   fpm监听端口,即nginx中php处理的地址,一般默认值即可。

slowlog = /var/log/php-fpm/$pool-slow.log   开启慢日志

pm = dynamic   动态模式进程管理开启

pm.start_servers = 32   最初开启多少进程

pm.min_spare_servers = 32   最小的多余进程数,最少空闲。用户访问会消耗掉进程。然后为了满足后续游湖随时随地开启进程保持空闲数为32。

pm.max_children = 512   指PHP-FPM Pool 最大的子进程数,数值取决于你的服务器内存。 假设你打算给10G内存给当前配置的PHP-FPM Pool,一般一个PHP请求占用内存10M-40M,我们按站点每个PHP请求占用内存25M,这样max_children = 10G/25M = 409。所以,这个值可以根据情况算出来

pm.max_spare_servers = 64   最大的多余进程。大规模断开后,高并发访问过后,还剩多少。

pm.max_requests = 1500   每个子进程能响应的请求数量,到达此数字,该PHP进程就被释放掉了。ax_requests是每个子进程重生之前处理的请求数, 默认值为unlimited(默认为1024),可以设置小一点(如500左右),这样可以避免内存泄露带来的问题

测试

在物理机本地做host解析:192.168.29.143 myblog.com

访问http://myblog.com/index.php如下。

踩坑:

一、在访问测试数据库连接mysql.php页面时,网页无法访问

nginx日志

2023/05/20 03:29:37 [error] 3287#3287: *23 FastCGI sent in stderr: "PHP message: PHP Fatal error:  Uncaught Error: Call to undefined function mysql_connect() in /www/wordpress/mysql.php:5

解决

php7.0高版本已废弃mysql_connect()函数,使用mysqli_connect()替代

 二、第一个坑解决后,再次访问mysql.php,依然无法正确访问,访问页面空白

nginx日志

PHP message: PHP Warning:  mysqli_connect(): (HY000/2054): The server requested authentication method unknown to the client in /www/wordpress/mysql.php on line 5" while reading response header from upstream, client: 192.168.29.1, server: myblog.com, request: "GET /mysql.php HTTP/1.1", upstream: "fastcgi://192.168.29.143:9000", host: "myblog.com"

解决

mysql8.0版本使用新的密码认证插件 caching_sha2_password,先前版本使用的默认插件是mysql_native_password。在index.php页面可看到mysqlnd部分php支持的认证插件,没有caching_sha2_password,可使用mysql_native_password;所以在mysql部署部分将zhangsan认证插件改为mysql_native_password。

业务上线——WordPress

#下载wordpress并解压
[root@php ~]#wget -O wordpress.tar.gz https://cn.wordpress.org/latest-zh_CN.tar.gz
[root@php ~]#tar -x wordpress.tar.gz -C /www/

访问http://myblog.com/index.php

无法加载网页样式,实际是有这些样式文件的。待解决

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/561376.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

网络原理(六):http 协议(上)

目录 HTTP 协议是什么 抓包工具 Fiddler 的下载 使用Fiddler HTTP 请求 (Request) HTTP 请求格式 首行 请求头&#xff08;Header&#xff09; Cookie HTTP 协议是什么 还是老样子&#xff0c;在讲解http 之前我们先来了解以下什么叫做 http 。 HTTP&#xff08;Hyp…

使用百度 PaddleOCR对身份证识别的简单处理

一&#xff1a;引言 本文才用百度的PaddleOCR对身份证进行识别的处理&#xff0c;由于直接使用并未进行对跟多数据集进行训练&#xff0c;当前的效果是对非少数民族的身份证识别率可以达到85%以上&#xff0c;同时要求身份证图片是正面且相对清晰。否则效果不理想&#xff0c;本…

基于java的时间管理系统的设计与实现

背景 要设计一个时间管理系统&#xff0c;通过这个系统能够满足时间管理的管理功能。系统的主要功能包括首页&#xff0c;个人中心&#xff0c;系统公告管理&#xff0c;用户管理&#xff0c;时间分类管理&#xff0c;事件数据管理&#xff0c;目标数据管理&#xff0c;用户日…

【系统软件】源码编译安装ZLIB——Could NOT find ZLIB(missing:ZLIB_LIBRARY ZLIB_INCLUDE_DIR

【系统软件】源码编译安装ZLIB——Could NOT find ZLIB(missing:ZLIB_LIBRARY ZLIB_INCLUDE_DIR 前言一、简介二、源码下载三、解压、构建四、编译五、安装六、安装成功后如下图七、如何使用zlib中的include 前言 今天原本打算源码编译安装protobuf&#xff0c;但是在构建项目…

图神经网络GNN GCN AlphaFold2 虚拟药物筛选和新药设计

文章目录 图神经网络1. Geometric Deep LearningRepresentation learning 表征学习机器学习的数据类型&#xff1a;序列、网格、图引出GNN 2. Graph Neural NetworksMachine Learning Lifecyclelearning graph is hardFeature Learning in GraphsWays to Analyze NetworksA Nai…

chatgpt赋能Python-python_plot标题

Python Plot 标题&#xff1a;如何让你的数据可视化更加引人注目 Python是数据科学和可视化领域中最受欢迎的编程语言之一。Python的可视化库让数据可视化变得非常容易、灵活和美观。 在创建一个数据可视化时&#xff0c;最重要的是让图表或图形作品的标题尽可能引人注目。这…

chatgpt赋能Python-python_plt_标题

Python plt&#xff1a;用Python创建出色的可视化图表 Python是一种广泛使用的高级编程语言&#xff0c;它被用于各种不同的领域&#xff0c;包括Web开发、数据科学、人工智能和计算机视觉等。Python拥有一个强大的生态系统&#xff0c;其中包括了大量的第三方库和工具&#x…

chatgpt赋能Python-python_property描述符

Python Property描述符&#xff1a;什么是Property&#xff1f; 介绍 在Python中&#xff0c;属性是一种非常强大的方式&#xff0c;在代码中隐藏数据并将其保护起来。我们可以使用属性来让代码更可读&#xff0c;更易于维护&#xff0c;并降低代码中的错误风险。 Python中&a…

一、服务端渲染技术NUXT

文章目录 一、服务端渲染技术NUXT1.1 什么是服务端渲染1.2 什么是NUXT 2、NUXT环境初始化2.1 下载压缩包2.2解压2.3修改package.json2.4修改nuxt.config.js2.5终端中进入项目目录安装依赖2.6 引入element-ui2.7 测试运行2.8 NUXT目录结构 3、封装axios3.1 安装axios3.2 封装axi…

抖音矩阵系统开发分析(附代码部分)

简介 本文档旨在介绍抖音SEO源码开发相关内容&#xff0c;包括技术架构、关键模块、实现原理等方面的内容。 技术架构 抖音SEO源码采用的是分布式架构。整个系统可以分为以下几个模块&#xff1a; 数据抓取模块&#xff1a;负责从抖音服务器抓取数据&#xff0c;并进行去重和…

一个公司,一个机器视觉工程师

​一个公司,一个机器视觉工程师。 大家觉得这种公司,这种情况可能很难,很尴尬。 其实一个公司,一个机器视觉工程师,公司业务上是有需求的,多数选择有经验的机器视觉工程师,我遇到的视觉人机器视觉粉丝里面还是比较多的。这样子的公司大多数是选择有经验的机器视觉工程师…

【22-23春】AI作业10-经典卷积网络

1.LeNet & MNIST LeNet是一种神经网络的模型&#xff0c;用于图像识别和分类。他包含 3 个卷积层&#xff0c;2 个池化层&#xff0c;1 个全连接层。其中所有卷积层的所有卷积核都为 5x5&#xff0c;步长 strid1&#xff0c;池化方法都为全局 pooling&#xff0c;激活函数…

一元函数的凹性concavity以及二阶导数

凹性&#xff08;concavity&#xff09;与函数导数的变化率有关。一个函数f是上凹(即抛物线方向开口向上)&#xff0c;其导数f是增函数&#xff0c;也意味着f的导数&#xff08;即f&#xff09;是正数&#xff1b;类似的一个函数f是下凹(即抛物线方向开口向下)&#xff0c;其导…

chatgpt赋能Python-python_plot_标题

Python Plot: 如何更好地可视化你的数据 如果你需要更好地理解你的数据&#xff0c;Python Plot是一个非常好的工具。在这篇文章里&#xff0c;我将向你介绍如何使用Python Plot来可视化你的数据。我们将讨论如何使用Python Plot创建各种不同类型的图形&#xff0c;以及如何使…

chatgpt赋能Python-python_os_system_隐藏cmd窗口

Python os.system函数 在Python中&#xff0c;os.system函数是一个非常常用的系统调用函数。它的作用是执行一个命令行语句。不过&#xff0c;使用os.system函数有时候会出现一个问题&#xff0c;就是会弹出一个命令行窗口。而在一些特殊场合下&#xff0c;我们可能希望这个命…

chatgpt赋能Python-python_plot坐标轴

Python绘图库中坐标轴的设置 介绍 Python是一种简单易学&#xff0c;功能强大的编程语言。它被广泛用于数据科学和可视化领域。Python绘图库中的坐标轴设置可以让我们更好地展示数据&#xff0c;让我们更轻松地理解数据。本篇文章将介绍Python绘图库中坐标轴设置的方法和技巧…

chatgpt赋能Python-python_plt颜色

Python plt颜色详解&#xff1a;掌握常用颜色与自定义颜色的技巧 在数据可视化的过程中&#xff0c;使用合适的颜色方案可以让图表更加清晰、易于理解。Python的matplotlib库中的plt模块提供了丰富的颜色方案供我们使用。在本篇文章中&#xff0c;我们将深入探讨plt颜色的基础…

Microsoft Office 2016安装

哈喽&#xff0c;大家好。今天一起学习的是office2016的安装&#xff0c;有兴趣的小伙伴也可以来一起试试手。 一、测试演示参数 演示操作系统&#xff1a;Windows 10 支持Win7、11安装&#xff0c;不支持WinXP系统 系统类型&#xff1a;64位 演示版本&#xff1a;SW_DVD5_Of…

py实现经典排序之冒泡和快排

文章目录 0、十大经典排序算法0.1 关于时间复杂度0.2 关于稳定性 1、冒泡排序(Bubble Sort)1.1 冒泡排序简介1.2 冒泡排序思路1.3 冒泡排序代码实现 2、快排2.1 快排简介2.2 快排思路2.3 快排代码实现 0、十大经典排序算法 0.1 关于时间复杂度 平方阶 (O(n2)) 排序 各类简单排…

mysql表操作

文章目录 mysql 操作表创建表创建表实例查看表结构修改表结构删除表结构删除表结构 mysql 操作表 mysql表操作至少有以下俩种&#xff1a; DDL【data definition language】 数据定义语言&#xff0c;用来维护存储数据的结构 代表指令: create, drop, alter DML【data manipu…