综合架构之网站服务-LNMP搭建博客

1.掌握LNMP的安装步骤
2.LNMP架构访问原理


网站架构组成

分类:LNMP(php) (LNMT(tomcat) LNMP(python)
组成部分及注意要点

  • L-linux (安全服务是否关闭 /tmp 1777 --mysql服务)
  • N-nginx location root index rewrite
  • M-mysql mariadb
  • P-php 解析php动态请求

网站架构LNMP部署过程

mariadb部署:
第一个历程: 安装软件

    yum install -y mariadb mariadb-server

第二个历程: 启动程序服务

systemctl start mariadb

php如何部署:
第一个历程: 清空系统中php程序

yum remove php-mysql php php-fpm php-common

第二个历程: 配置php下载源

不配置下载源的时候可能去官网下载 如果下载的是最新版本,可能会出现和nginx和数据库兼容性出现问题。

rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm

第三个历程: 安装php7.1相关软件

    yum install -y php71w php71w-cli php71w-common php71w-devel php71w-embedded  php71w-gd php71w-mcrypt php71w-mbstring php71w-pdo php71w-xml php71w-fpm php71w-mysqlnd php71w-opcache  php71w-pecl-memcached php71w-pecl-redis php71w-pecl-mongodb    

LNMP工作原理

  • 用户访问网站首先会通过负载均衡,如果是静态页面,通过负载再到达nginx,直接返回静态页面。
  • 如果访问的是动态页面,nginx无法处理会判断是否为.php的为文件,如果是,就是动态请求。通过fastcgi_pass接口传给php进行处理。
  • php通过php-fpm进行接收nginx传递过来的动态文件,如果PHP程序自己能处理,则处理后返回给nginx,nginx再返还给用户。
  • 如果php无法处理,通过PHP解析器解转化为sql语句交给mysql进行处理。

NGINX------>PHP---------->mysql


补充:检查下yum源查看是否有相应的源,如果没有,则还是无法安装

[root@nfs001 ~]# ll /etc/yum.repos.d/
total 60
-rw-r--r--. 1 root root  664 May 11  2018 epel.repo
-rw-r--r--  1 root root  951 Oct  3  2017 epel.repo.rpmnew
-rw-r--r--  1 root root 1050 Oct  3  2017 epel-testing.repo
-rw-r--r--  1 root root  963 Oct  9  2014 webtatic-archive.repo
-rw-r--r--  1 root root  865 Oct  9  2014 webtatic.repo
-rw-r--r--  1 root root  963 Oct  9  2014 webtatic-testing.repo

LNMP架构配置过程

mariadb数据库配置:
第一个历程: 修改数据库密码信息

mysqladmin -uroot password "oldboy123"  --- 设置密码 
mysql -uroot -poldboy123

数据库默认没有密码。

php程序配置:
第一个历程: 修改配置文件

vim /etc/php-fpm.d/www.conf

8(行)user = www --- 需要将php进程管理用户 和 nginx服务worker进程用户保持一致
10(行)group = www --- 需要将php进程管理用户 和 nginx服务worker进程用户保持一致

第二个历程: 重启php服务

systemctl restart php-fpm.service 

nginx + php建立关系
第一个历程: 修改nginx配置文件

    location ~ \.php$ {                  --- 匹配动态.php结尾请求
          root /html;                     --- 设置站点目录
          fastcgi_pass  127.0.0.1:9000;  --- 将动态请求信息发送给php程序进行处理,9000为本地的php服务。
          fastcgi_index index.php;       --- 默认处理php请求文件为index.php---没有具体指定的php文件时,就会默认访问index.php
                                             www.oldboy.com/test.php
          fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
                                         --- 将要处理文件信息以及详细路径告知给PHP程序
                                         /html/www         /test.php
                                         test.php  --- php程序    -----php不知道动态文件的详细在什么地方 加上fastcgi后可以知道test.php在哪个站点下 /html/www                           
          include fastcgi_params;        --- 加载fastcgi变量配置文件
    }

详细的代码

server {
    listen            80;
    server_name  www.oldboy.com;
    location / {
        root   /html/www;
        index  index.php oldboy.jpg index.html index.htm;
    }
    location ~ \.php$ {
        root /html/www;
        fastcgi_pass  127.0.0.1:9000;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
            include fastcgi_params;
        }
    }

<?php phpinfo() ?> 动态的PHP代码,最后可通过PHP程序动态的文件解析出来。


站点下数据库跟php连接的测试代码

php测试代码
cd /html/www

php + mariadb 建立关系
vim test_mysql.php
<?php
    $servername = "localhost"; #设置变量
    $username = "root"; #设置变量
    $password = "oldboy123";#设置变量
    //$link_id=mysql_connect('主机名','用户','密码'); 注释
    //mysql -u用户 -p密码 -h 主机 注释
    $conn = mysqli_connect($servername, $username, $password); #函数传参 
    if ($conn) {
          echo "mysql successful by root !\n"; #如果成功输出mysql成功
       }else{
          die("Connection failed: " . mysqli_connect_error()); #失败的原因是什么
    }
?>

源代码文件

    cd /html/www 
    echo '<?php phpinfo() ?>' >test.php
    
    php + mariadb 建立关系
    vim test_mysql.php
    <?php
        $servername = "localhost";
        $username = "root";
        $password = "oldboy123";
        //$link_id=mysql_connect('主机名','用户','密码');
        //mysql -u用户 -p密码 -h 主机
        $conn = mysqli_connect($servername, $username, $password);
        if ($conn) {
              echo "mysql successful by root !\n";
           }else{
              die("Connection failed: " . mysqli_connect_error());
        }
    ?>

nginx命令的补充

[root@web01 ~]# nginx -h
    nginx version: nginx/1.16.0
    Usage: nginx [-?hvVtTq] [-s signal] [-c filename] [-p prefix] [-g directives]
    
    Options:
      -?,-h         : this help
      -v            : show version and exit
                      显示软件版本并退出
      -V            : show version and configure options then exit
                      显示软件版本和配置参数并退出
      -t            : test configuration and exit
                      测试配置文件并退出
      -T            : test configuration, dump it and exit
                      测试配置文件, 保存全部配置信息并退出
      -q            : suppress non-error messages during configuration testing
                      在配置测试时, 抑制正确信息输出,只显示错误信息
      -s signal     : send signal to a master process: stop, quit, reopen, reload
                      stop   信号 停止程序
                      reload 信号 平滑重启
      -p prefix     : set prefix path (default: /etc/nginx/)
                      设置加载配置文件路径  nginx.conf                  
      -c filename   : set configuration file (default: /etc/nginx/nginx.conf)
                      设置加载指定配置文件
      -g directives : set global directives out of configuration file
    

利用LNMP架构部署网站代码 -- wordpress--blog

  • 第一个历程: 获取代码信息
    获取开源代码:
    blog 博客 wordpress
    www 网站 phpcms
    bbs 论坛 Discuz
    zhihu 知乎 wecenter
  • 第二个历程: 将代码解压 放置到站点目录,并将加压的目录变为blog
tar xf wordpress-4.7.3-zh_CN.tar.gz
[root@web01 html]# ll blog/ -d
drwxr-xr-x 5 root root 4096 Aug  6 18:29 blog/
total 188
-rw-r--r--  1 www www   418 Sep 25  2013 index.php
-rw-r--r--  1 www www 19935 Jan  3  2017 license.txt
-rw-r--r--  1 www www  6956 Mar  7  2017 readme.html
-rw-r--r--  1 www www  5447 Sep 28  2016 wp-activate.php
drwxr-xr-x  9 www www  4096 Mar  7  2017 wp-admin
-rw-r--r--  1 www www   364 Dec 19  2015 wp-blog-header.php
-rw-r--r--  1 www www  1627 Aug 29  2016 wp-comments-post.php
-rw-rw-rw-  1 www www  3212 Aug  6 21:36 wp-config.php
-rw-r--r--  1 www www  2930 Mar  7  2017 wp-config-sample.php
drwxr-xr-x  6 www www    84 Aug  6 21:52 wp-content
-rw-r--r--  1 www www  3286 May 25  2015 wp-cron.php
drwxr-xr-x 18 www www  8192 Mar  7  2017 wp-includes
-rw-r--r--  1 www www  2422 Nov 21  2016 wp-links-opml.php
-rw-r--r--  1 www www  3301 Oct 25  2016 wp-load.php
-rw-r--r--  1 www www 33939 Nov 21  2016 wp-login.php
-rw-r--r--  1 www www  8048 Jan 11  2017 wp-mail.php
-rw-r--r--  1 www www 16250 Nov 29  2016 wp-settings.php
-rw-r--r--  1 www www 29896 Oct 19  2016 wp-signup.php
-rw-r--r--  1 www www  4513 Oct 15  2016 wp-trackback.php
-rw-r--r--  1 www www  3065 Sep  1  2016 xmlrpc.php

更改权限,涉及到一个用户转换的问题
chown -R www. /html


用户访问web的时候,不管是什么用户,都会转化为www用户。(和nginx worker进程的是同一个用户)。
用户访问动态的请求由nginx会交给php程序,此时php的程序为apache(默认)也无法处理。
需要将php的用户变为和nginx worker进程的同一个用户。

  • 第三个历程: 确认nginx配置文件是否正确
    server {
        listen            80;
        server_name  blog.oldboy.com;
        location / {
            root   /html/blog;
            index  index.php oldboy.jpg index.html index.htm;
        }
        location ~ \.php$ {
            root /html/blog;
            fastcgi_pass  127.0.0.1:9000;
            fastcgi_index index.php;
            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
            include /etc/nginx/fastcgi_params;
        }
    }
  • 第四个历程: 访问blog页面进行初始化配置过程
    配置blog代码和数据库建立联系


    第一次访问页面

根据提示需要创建数据库

创建网站的数据库
blog网站所需数据库(进入到数据库界面)
create database wordpress;#没有补全功能
show databases;

授权管理数据库用户
blog网站所需数据库(进入到数据库界面)
grant all on wordpress.* to 'wordpress'@'localhost' identified by 'oldboy123';

mysql相关命令
mysql -uroot -poldboy123 ---进入数据库
show databases----查看数据库
create database wordpress;---创建数据库
drop database wordpress;---删除数据库
select host,user from mysql.user; ---查看user表中的host信息和user信息
select * from mysql.user; -------查看mysql的user表中查看所有信息
user wordpress; ----进入数据库
show tables;----查看库中的表信息
mysql -uwordpress -poldboy123 -h 172.16.1.51
远程连接数据库服务器会得到远程主机的IP地址,并进行域名反向解析解析到IP地址的主机信息web01 和数据库中的wordpress库无法匹配。所以不能连接。
解决方法:跳过地址反向解析
skip-name-resolve
解决方法:删除无用的用户
drop user ' ' @' '


点击确定后,将库中信息导入到表中

数据库进行建表

post方法访问网站
image

可以看到请求头信息,一般公司会将此信息隐藏。

image

博客上传主题出现413的响应码,无法上传的问题

image

解决办法:

vi /etc/nginx/conf.d/blog.conf

   keepalive_timeout  65;
    include /etc/nginx/conf.d/*.conf;
    client_max_body_size 50m;#(设置客户端请求体最大值,默认为1M)
}
image

vi /etc/php.ini ----修改php的上传大小

; Maximum allowed size for uploaded files.
; http://php.net/upload-max-filesize
upload_max_filesize = 20M
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,732评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,496评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,264评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,807评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,806评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,675评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,029评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,683评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,704评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,666评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,773评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,413评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,016评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,978评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,204评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,083评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,503评论 2 343