IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> PHP知识库 -> centos7-lnmp环境配置-nginx-php-mysql -> 正文阅读

[PHP知识库]centos7-lnmp环境配置-nginx-php-mysql

简介

lnmp环境一般是中小型公司常用的一个环境,现在也有很多的lnmp一键安装脚本,宝塔面板等等工具,功能更加丰富,可以选择安装组件的版本。但是对于稍微大一些的公司一般情况下都不在用这种一键安装工具了,原因:太复杂,不排除有漏洞的可能性。所以能够自己掌握编译这些组件的方式,更加可控、安全、且方便后期升级变更,方便管理。而且后期部署量较大的情况下,可以参考开源的lnmp脚本,自己修改、自定义,更加方便、可控。

1. 环境准备

主机环境是centos7.9,先安装一些常用的软件包

yum -y install epel-release
yum -y install vim-enhanced telnet bind-utils perl-libwww-perl perl-LWP-Protocol-https openssl-devel pcre-devel yum-utils wget curl gcc glibc make cmake autoconf pcre pcre-devel lrzsz net-tools unzip zip bash-completion

2. 配置nginx

nginx下载地址:http://nginx.org/en/download.html

wget http://nginx.org/download/nginx-1.20.2.tar.gz
tar -xcvf nginx-1.20.2.tar.gz
cd nginx-1.20.2

# 编译安装
./configure \
--prefix=/usr/local/nginx \
--with-http_ssl_module \
--with-http_v2_module \
--with-http_stub_status_module \
--with-http_gzip_static_module \
--with-pcre \
--with-debug \
--with-stream \
--with-stream_ssl_module \
--with-stream_realip_module

make && make install

mkdir /var/log/nginx
useradd www -s /sbin/nologin -M  #不创建家目录,不能登录
chown -R www.www /usr/local/nginx/

注意:如果编译安装过程中出现错误,屏幕上会出现报错信息。大部分的编译报错是由于缺少某些库的支持引起的。
另外,在没有改动源代码的情况下,如果需要重新编译安装nginx,就不必再使用configure脚本自动生成makefile了,可以删除上次安装的nginx路径,解压源码包重新按上面的编译安装步骤来一遍。


修改/etc/profile文件,把nginx目录加入到系统路径

# vim /etc/profile
export NGINX_HOME=/usr/local/nginx/
export PATH=$NGINX_HOME/sbin/:$PATH
# 使配置生效
source /etc/profile
nginx -V  # 确认配置没有问题

添加nginx服务,方便管理

cat > /etc/systemd/system/nginx.service <<EOF
[Unit]
Description=The NGINX HTTP and reverse proxy server
After=syslog.target network.target remote-fs.target nss-lookup.target

[Service]
Type=forking

LimitCORE=infinity
LimitNOFILE=1000000
LimitNPROC=1000000

PIDFile=/run/nginx.pid
ExecStartPre=/usr/local/nginx/sbin/nginx -t
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true

[Install]
WantedBy=multi-user.target

EOF

systemctl start nginx
systemctl enable nginx

主配置文件nginx.conf参考

user  www www;
worker_processes  auto;
pid /run/nginx.pid;

worker_rlimit_nofile 100000;

events
{
    use epoll;
    worker_connections 100000;
}

http
{
    server_tokens off;
    include       mime.types;
    default_type  application/octet-stream;

    ssl_session_cache shared:SSL:10m;
    ssl_session_timeout 5m;
    
    #proxy_ssl_server_name on;

    server_names_hash_bucket_size 128;
    client_header_buffer_size 32k;
    large_client_header_buffers 4 32k;
    client_max_body_size 3m;

    sendfile on;
    tcp_nopush     on;

    keepalive_timeout  60;
    tcp_nodelay on;

    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 256k;

    gzip on;
    gzip_min_length  1k;
    gzip_buffers     4 16k;
    gzip_http_version 1.0;
    gzip_comp_level 2;
    gzip_types       text/plain application/javascript text/css application/xml;
    gzip_vary on;

    proxy_buffer_size 128k;
    proxy_buffers   32 128k;
    proxy_busy_buffers_size 128k;
    proxy_ignore_client_abort on;

    log_format  access  '$remote_addr - $remote_user [$time_local] "$request" "$http_host" '
                        '$status $body_bytes_sent "$http_referer" "$host" '
                        '"$http_user_agent" $http_x_forwarded_for '
                        '$connection $upstream_addr "$upstream_http_host" '
                        'upstream_response_time $upstream_response_time request_time $request_time ' $scheme;

    access_log  /var/log/nginx/access.log  access;
    error_log   /var/log/nginx/error.log;

    server{
        listen       80;
        server_name localhost;
        
        index index.html index.htm;
        root  /usr/local/nginx/html/;

        location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
        {
            expires      30d;
        }

        location ~ .*\.(js|css)?$
        {
            expires      12h;
        }

    }

include       vhosts/*.conf;
}

新建一个vhosts目录,以后新增的域名配置文件都放在这个目录里面

mkdir -pv /usr/local/nginx/conf/vhosts/
chown -R www.www /usr/local/nginx/
systemctl restart nginx

nginx基本配置完成。

3. 配置php-fpm

源码包下载地址:https://www.php.net/releases/


yum -y install freetype freetype-devel libpng libpng-devel libxml2 \
 libxml2-devel bzip2 bzip2-devel mhash mhash-develbzip2-devel libmcrypt \ 
 libmcrypt-devel libzip libezip-devel psmisc.x86_64 recode recode-devel \ 
 libtidy libtidy-devel libevent libevent-devel openssl libssl-dev \ 
 libcurl4-gnutls-dev libjpeg-dev libpng-dev libmcrypt-dev libreadline6 \ 
 libreadline6-dev autoconf curl-devel

wget https://www.php.net/distributions/php-7.3.13.tar.gz
tar -xvf php-7.3.13.tar.gz
cd php-7.3.13

# 编译安装
./configure \
--prefix=/usr/local/php \
--with-config-file-path=/usr/local/php/etc \
--enable-inline-optimization \
--enable-shared \
--enable-calendar \
--with-openssl \
--enable-opcache \
--enable-fpm \
--with-mysqli \
--with-pdo-mysql \
--with-gettext \
--enable-mbstring \
--with-iconv \
--with-mhash \
--enable-mbregex \
--enable-bcmath \
--enable-soap \
--with-libxml-dir \
--enable-pcntl \
--enable-shmop \
--enable-sysvmsg \
--enable-sysvsem \
--enable-sysvshm \
--enable-sockets \
--enable-session \
--enable-xml \
--with-curl \
--with-zlib \
--enable-zip \
--with-bz2 \
--with-gd \
--with-freetype-dir \
--with-jpeg-dir \
--with-png-dir \
--with-pcre-regex \
--with-pdo-sqlite \
--without-pear \
--with-png-dir \
--with-xmlrpc \
--with-zlib

# 如果编译报错,可能是有些扩展包没有安装,根据错误提示添加安装包就行,然后重新编译
# 例如libzip的扩展
yum remove libzip libzip-devel 
wget https://libzip.org/download/libzip-1.3.2.tar.gz
tar xvf libzip-1.3.2.tar.gz
cd libzip-1.3.2
./configure
make && make install

# 注意,默认编译成功后是nts版本的,如果要编译zts版本的,添加如下编译参数
--enable-maintainer-zts


# make -j $(($(nproc)-1)) 适用于多核CPU的情况
make
make install

编译安装完成后,修改/etc/profile文件,把php目录加入到系统路径

# vim /etc/profile
export PHP_HOME=/usr/local/php/
export PATH=$PHP_HOME/sbin/:$NGINX_HOME/sbin/:$PATH

添加配置文件

# php --ini 
Configuration File (php.ini) Path: /usr/local/php/etc
Loaded Configuration File:         (none)
Scan for additional .ini files in: (none)
Additional .ini files parsed:      (none)

# 新编译好的php是没有主配置文件php.ini的,到解压包目录下可以看到有两个示例文件:
php.ini-development  
php.ini-production

cp php.ini-production /usr/local/php/etc/php.ini
然后再根据需要调整修改这个配置文件即可。
# 修改php.ini中的时区设置
# vim /usr/local/php/etc/php.ini
date.timezone = Asia/Shanghai

cd /usr/local/php/etc/
cp php-fpm.conf.default php-fpm.conf
cd php-fpm.d/
cp www.conf.default www.conf

# 修改www.conf配置文件,主要是下面的配置,php-fpm监听可以用socket和端口两种方式
# 也可以不修改,直接用默认的,默认的也是端口监听的方式

[www]
user = www
group = www

# listen = /tmp/php-fpm.socket
listen = 127.0.0.1:9000

listen.backlog = 8192
listen.owner = www
listen.group = www
listen.mode = 0666

pm = dynamic
pm.max_children = 50
pm.start_servers = 8
pm.min_spare_servers = 5 
pm.max_spare_servers = 20

配置php-fpm服务

cp sapi/fpm/php-fpm.service /etc/systemd/system/php-fpm.service
systemctl start php-fpm
systemctl enable php-fpm

ps -ef|grep php
netstat -tnulp|grep php

如果服务启动无异常,说明配置成功。


安装php扩展组件,比如redis,mongo
各种扩展包地址:http://pecl.php.net/package-stats.php

安装redis扩展包
下载地址:http://pecl.php.net/package/redis
选择一个最新版本的安装包下载编译,不同版本的安装包可能与你要安装的php版本不匹配,这时可以降低版本安装

wget http://pecl.php.net/get/redis-5.3.0.tgz
tar -xvf redis-5.3.0.tgz
cd redis-5.3.0/
/usr/local/php/bin/phpize 
./configure --with-php-config=/usr/local/php/bin/php-config
make
make install 

# 修改php.ini文件,把扩展加进来,加一行如下配置
extension=redis.so

加完之后,测试一下
php -m | grep redis
如果能看到显示,就说明扩展安装成功了

安装mongo扩展包,类似redis的,如下

wget http://pecl.php.net/get/mongodb-1.9.2.tgz
tar -xvf mongodb-1.9.2.tgz
cd mongodb-1.9.2/
/usr/local/php/bin/phpize 
./configure --with-php-config=/usr/local/php/bin/php-config
make
make install 

# 修改php.ini文件,把扩展加进来,加一行如下配置
extension=redis.so

加完之后,测试一下
php -m|grep mongodb
如果能看到显示,就说明扩展安装成功了

4. 配置mysql

mysql不用编译安装的方式,直接下载oracle官方的rpm包,用yum安装的方式。
或者用mysql二进制包的方式,不太推荐用编译安装的方式。
测试的时候也可以用docker配置的方式,更加简单。

下面用rpm安装的方式安装配置mysql。
下载地址:https://downloads.mysql.com/archives/community/

下载这个安装包合集
在这里插入图片描述

wget https://downloads.mysql.com/archives/get/p/23/file/mysql-5.7.36-1.el7.x86_64.rpm-bundle.tar
tar -xvf mysql-5.7.36-1.el7.x86_64.rpm-bundle.tar
# 直接全部安装完事,当然也可以按照需要安装
yum remove mariadb*
yum -y localinstall mysql-community-*.rpm

在这里插入图片描述
查看初始密码:

grep 'password' /var/log/mysqld.log |less

进行初始化设置:

# 进入MySQL命令行
mysql -uroot -p
# 
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'Root@2022';
Query OK, 0 rows affected (0.00 sec)

# 新建数据库,新建用户
mysql> create database mydata;
Query OK, 1 row affected (0.00 sec)

mysql> grant all privileges on mydata.* to 'test'@'127.0.0.1' identified by 'Test@2022';
Query OK, 0 rows affected, 1 warning (0.00 sec)

mysql> flush privileges;

mysql的配置文件位置在/etc/my.cnf,参考配置如下:

[mysqld]

innodb_buffer_pool_size = 1024M
innodb_flush_log_at_trx_commit=1

log_bin=mysql-bin
expire_logs_days=15

binlog_format=mixed
slow_query_log=1
slow_query_log_file=mysql-slow.log


datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock

port = 3306
server_id = 1011
user=mysql

sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES

max_connections=301
character_set_server=utf8mb4

validate_password_policy=0

log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

设置服务开机启动

systemctl enable nginx php-fpm mysqld

5. 测试

测试php
修改nginx.conf配置,设置默认配置

    server {
        listen       80;
        server_name  localhost;
        index index.php index.htm index.html;
        root /usr/local/nginx/html/;

        location / {
            try_files $uri $uri/ /index.php?$args;
        }

        location ~ .*\.(php|php5)?$ {
            include fastcgi.conf;
            fastcgi_pass 127.0.0.1:9000;
            fastcgi_index index.php;
            fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
            include        fastcgi_params;
        }

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

新建测试文件index.php

# vim /usr/local/nginx/html/index.php
<html>
<h1>This is a php test page.</h1>
<?php
phpinfo();
?>
</html>
~           

nginx配置重新加载

nginx -t
nginx -s reload

访问服务器的80端口,可以看到如下页面:
在这里插入图片描述
说明nginx+php-fpm的设置没有问题了。

OK,现在nginx,php,mysql已经全部配置完毕。

  PHP知识库 最新文章
Laravel 下实现 Google 2fa 验证
UUCTF WP
DASCTF10月 web
XAMPP任意命令执行提升权限漏洞(CVE-2020-
[GYCTF2020]Easyphp
iwebsec靶场 代码执行关卡通关笔记
多个线程同步执行,多个线程依次执行,多个
php 没事记录下常用方法 (TP5.1)
php之jwt
2021-09-18
上一篇文章      下一篇文章      查看所有文章
加:2022-03-21 20:28:31  更:2022-03-21 20:29:24 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 -2024/12/26 16:26:48-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码
数据统计