架构班(网络班)第一周作业:

1、编译安装LNMP,配置自定义404页面,配置访问日志为json格式。
2、配置虚拟主机,实现https访问
www.x.com(x.com为自己定义的域名)

实验环境:Centos7.5,关闭防火墙和SElinux,ip:192.168.10.14

一、编译安装LNMP

1、安装各种依赖包

[root@rs02 ~]# yum install -y bzip2-devel openssl-devel gnutls-devel gcc gcc-c++ cmake ncurses-devel bison-devel libaio-devel openldap  openldap-devel
[root@rs02 ~]# yum install -y autoconf bison libxml2-devel libcurl-devel libevent libevent-devel gd-devel curl expat-devel

安装php加密支持库

[root@rs02 ~]# curl -O  http://iweb.dl.sourceforge.net/project/mcrypt/Libmcrypt/2.5.8/libmcrypt-2.5.8.tar.gz
[root@rs02 ~]# tar xf libmcrypt-2.5.8.tar.gz
[root@rs02 ~]# cd libmcrypt-2.5.8  && ./configure && make && make install

2、编译安装nginx

这里使用1.14.0版本

2.1、创建nginx用户、nginx日志存放目录:/mydata/logs/nginx/

[root@rs02 ~]# useradd -r -s /sbin/nologin nginx
[root@rs02 ~]# mkdir /mydata/logs/nginx/ -pv && chown -R  nginx.nginx /mydata/logs/nginx/

2.2、下载、编译、安装nginx

[root@rs02 ~]# curl -O  
[root@rs02 ~]# tar xf nginx-1.14.0.tar.gz
[root@rs02 ~]# cd nginx-1.14.0
[root@rs02 nginx-1.14.0]# ./configure –prefix=/usr/local/nginx \
–user=nginx \
–group=nginx \
–http-log-path=/mydata/logs/nginx/access.log \
–error-log-path=/mydata/logs/nginx/error.log \
–with-http_ssl_module \
–with-http_realip_module \
–with-http_flv_module \
–with-http_mp4_module \
–with-http_gunzip_module \
–with-http_gzip_static_module \
–with-http_image_filter_module \
–with-http_stub_status_module &&  make && make install

3、编译安装maraidb

这里使用10.3.7版本源码包

3.1、下载mariadb10.3.7源码包

[root@rs02 ~]# curl -O http://ftp.hosteurope.de/mirror/archive.mariadb.org//mariadb-10.3.7/source/mariadb-10.3.7.tar.gz

3.2、创建mysql用户、数据库安装目录(/usr/local/mysql/)、数据库数据存放目录(/mydata/mariadb/)

 [root@rs02 ~]# useradd -r -s /sbin/nologin mysql
 [root@rs02 ~]# mkdir  /mydata/mariadb/ -pv
 [root@rs02 ~]# mkdir /usr/local/mysql/
 [root@rs02 ~]# chown -R mysql.mysql  /mydata/mariadb/
 [root@rs02 ~]# chown -R mysql.mysql  /usr/local/mysql/

3.3、解压、编译、安装mariadb

[root@rs02 ~]# tar xf mariadb-10.3.7.tar.gz
[root@rs02 ~]# cd mariadb-10.3.7
[root@rs02 mariadb-10.3.7]# cmake . -DCMAKE_INSTALL_PREFIX=/usr/local/mysql \ 
 -DMYSQL_UNIX_ADDR=/tmp/mysql.sock \ 
 -DMYSQL_DATADIR=/mydata/mariadb \ 
 -DSYSCONFDIR=/etc \ 
 -DMYSQL_USER=mysql \ 
 -DMYSQL_TCP_PORT=3306 \ 
 -DWITH_XTRADB_STORAGE_ENGINE=1 \ 
 -DWITH_INNOBASE_STORAGE_ENGINE=1 \ 
 -DWITH_PARTITION_STORAGE_ENGINE=1 \ 
 -DWITH_BLACKHOLE_STORAGE_ENGINE=1 \ 
 -DWITH_MYISAM_STORAGE_ENGINE=1 \ 
 -DWITH_READLINE=1 \ 
 -DENABLED_LOCAL_INFILE=1 \ 
 -DWITH_EXTRA_CHARSETS=all \ 
 -DDEFAULT_CHARSET=utf8 \ 
 -DDEFAULT_COLLATION=utf8_general_ci \ 
 -DEXTRA_CHARSETS=all \ 
 -DWITH_BIG_TABLES=1 \ 

 -DWITH_DEBUG=0 && make -j 2 && make -j 2 install

编译安装过程很漫长。

3.4、数据库初始化

[root@rs02 mariadb-10.3.7]# cd /usr/local/mysql/
[root@rs02 mysql]# ./scripts/mysql_install_db –user=mysql –basedir=/usr/local/mysql/  –datadir=/mydata/mariadb/

执行命令,看到OK,就说明初始化成功。

3.5、数据量服务文件配置

mariadb启动服务的文件是在安装目录下的support-files/mysql.server,把它复制到/etc/rc.d/init.d/目录中,并命名为mariadb,然后添加可执行权限,添加到系统服务管理即可。

[root@rs02 mysql]# cp /usr/local/mysql/support-files/mysql.server /etc/rc.d/init.d/mariadb
[root@rs02 mysql]# chmod +x /etc/rc.d/init.d/mariadb
[root@rs02 mysql]# chkconfig –add mariadb

3.6、配置环境变量

为了方便使用mysql命令,所以配置一下环境变量

[root@rs02 mysql]# echo 'export PATH=/usr/local/mysql/bin:$PATH'>/etc/profile.d/mysql.sh
[root@rs02 mysql]# chmod +x /etc/profile.d/mysql.sh
[root@rs02 mysql]# source /etc/profile.d/mysql.sh

3.7、修改mariadb的配置文件:my.cnf

在my.cnf文件中添加数据存放目录、socket存放目录

[root@rs02 mysql]# sed -i 's/datadir=.*/datadir=\/mydata\/mariadb/' /etc/my.cnf
[root@rs02 mysql]# sed -i 's/socket=.*/socket=\/tmp\/mysql.sock/' /etc/my.cnf

3.8、创建日志目录及数据库运行PID目录:/var/run/mysqld/

[root@rs02 mysql]# mkdir /var/log/mariadb/ && chown -R mysql.mysql /var/log/mariadb/
[root@rs02 mysql]# mkdir /var/run/mysqld/ && chown -R mysql.mysql /var/run/mysqld/

3.9、复制mariadb安装后的库文件到/usr/lib目录

[root@rs02 mysql]# cp -r /usr/local/mysql/lib/* /usr/lib/

4、编译安装php

这里使用7.2.7版本

4.1、下载php7.2.7包

[root@rs02 ~]# cd
[root@rs02 ~]# https://www.php.net/distributions/php-7.2.7.tar.gz

4.2、创建php-fpm用户

[root@rs02 ~]# useradd -r -s /sbin/nologin php-fpm

4.3、解压、编译、安装php

[root@rs02 ~]# tar xf php-7.2.7.tar.gz
[root@rs02 ~]# cd php-7.2.7
[root@rs02 php-7.2.7]# ./configure –prefix=/usr/local/php7 \ 
–with-config-file-path=/etc/php7 \ 
–with-config-file-scan-dir=/etc/php7.d \ 
–with-mysqli=mysqlnd \ 
–with-pdo-mysql=mysqlnd \ 
–with-mysql-sock=/tmp/mysql.sock \ 
–with-iconv-dir \ 
–with-freetype-dir \ 
–with-jpeg-dir \ 
–with-png-dir \ 
–with-zlib \ 
–with-bz2 \ 
–with-libxml-dir \ 
–with-curl \ 
–with-gd \ 
–with-openssl \ 
–with-mhash \ 
–with-xmlrpc \ 
–with-pdo-mysql \ 
–with-libmbfl \ 
–with-onig \ 
–with-pear \ 
–enable-xml \ 
–enable-bcmath \ 
–enable-shmop \ 
–enable-sysvsem \ 
–enable-inline-optimization \ 
–enable-mbregex \ 
–enable-fpm \ 
–enable-mbstring \ 
–enable-pcntl \ 
–enable-sockets \ 
–enable-zip \ 
–enable-soap \ 
–enable-opcache \ 
–enable-pdo \ 
–enable-mysqlnd-compression-support \ 
–enable-maintainer-zts \ 
–enable-session \ 
–with-fpm-user=php-fpm \ 
–with-fpm-group=php-fpm && make -j 2 && make -j 2 install

4.4、配置php.ini文件

复制php解压目录中的php.ini-production文件 到 /etc/php7/目录中

[root@rs02 php-7.2.7]# mkdir /etc/php7{,.d}
[root@rs02 php-7.2.7]# cp php.ini-production /etc/php7/php.ini
[root@rs02 php-7.2.7]# sed -i '/post_max_size/s/8/16/g;/max_execution_time/s/30/300/g;/max_input_time/s/60/300/g;s#\;date.timezone.*#date.timezone \= Asia/Shanghai#g' /etc/php7/php.ini

4.5、配置php-fpm文件

将php解压目录中的sapi/fpm/init.d.php-fpm文件复制 /etc/rc.d/init.d/目录并重命名为php-fpm

[root@rs02 php-7.2.7]# cp sapi/fpm/init.d.php-fpm /etc/rc.d/init.d/php-fpm
[root@rs02 php-7.2.7]# chmod +x /etc/rc.d/init.d/php-fpm
[root@rs02 php-7.2.7]# chkconfig –add php-fpm

4.6、资源池文件配置

默认www.conf膜拜文件放在安装目录下的etc/php-fpm.d/

[root@rs02 php-7.2.7]# cd /usr/local/php7/ 
[root@rs02 php-7.2.7]# cp etc/php-fpm.conf.default etc/php-fpm.conf 
[root@rs02 php-7.2.7]# cp etc/php-fpm.d/www.conf.default etc/php-fpm.d/www.conf

至此,PHP编译安装成功。

演示一下,添加其他模块:安装ldap模块

ldap模块放在php解压后的/ext/ldap目录中。

安装如下:

[root@rs02 php-7.2.7]# cd /root/php-7.2.7/ext/ldap
[root@rs02 ldap]# cp -af /usr/lib64/libldap* /usr/lib/
[root@rs02 ldap]# /usr/local/php7/bin/phpize
[root@rs02 ldap]# ./configure –with-php-config=/usr/local/php7/bin/php-config && make && make install
[root@rs02 ldap]# sed -i '/\;extension=bz2/aextension=ldap.so' /etc/php7/php.ini

5、nginx解析php

5.1修改nginx.conf,将虚拟主机部分单独出来。

虚拟主机配置文件统一放在conf.d目录中。注意备份原始文件。

为了好看,删除nginx.conf注释、空白行,输出重定向为nginx.conf.swp,之后再命名为nginx.conf.

[root@rs02 ldap]# cd /usr/local/nginx
[root@rs02 nginx]# cp conf/nginx.conf{,.bak}
[root@rs02 nginx]# grep -vE "#|^$" conf/nginx.conf>conf/nginx.conf.swp
[root@rs02 nginx]# rm -f conf/nginx.conf
[root@rs02 nginx]# cp conf/nginx.conf.swp conf/nginx.conf

将server配置段从nginx.conf分离出来:

[root@rs02 nginx]# sed -i '/server/,$d' conf/nginx.conf
[root@rs02 nginx]# mkdir conf.d
[root@rs02 nginx]# echo -e 'include /usr/local/nginx/conf.d/*.conf;\n}' >> conf/nginx.conf

5.2、创建虚拟主机配置文件

[root@rs02 nginx]# vim conf.d/server.conf
server {
            listen       80;
            server_name  localhost;
            location / {
                  root   /usr/local/nginx/html;
                  index  index.php index.html index.htm;
            }
            location ~ \.php$ {
                  root           /usr/local/nginx/html;
                  fastcgi_pass   127.0.0.1:9000;
                  fastcgi_index  index.php;
                  fastcgi_param  SCRIPT_FILENAME  /usr/local/nginx/html$fastcgi_script_name;
                  include        fastcgi_params;
                }
            }

5.3、创建网站测试页

默认网站目录为:/usr/local/nginx/html

在此目录中创建index.php文件

[root@rs02 nginx]# vim html/index.php
<?php
                   $conn = new mysqli('127.0.0.1','root','');
                  if($conn)
                     echo "connect maraidb OK…";
                  else
                     echo "connect mariadb Fail…";
                  mysqli_close($conn);
                  phpinfo();
?>

二、作业部分

1、配置自定义404页面,配置访问日志为json格式。

1.1 自定义404页面配置如下:

修改前面的虚拟主机配置文件:server.conf:

[root@rs02 nginx]# vim conf.d/server.conf
server {
            listen       80;
            server_name  localhost;
            location / {
                  root   /usr/local/nginx/html;
                  index  index.php index.html index.htm;
            }
            error_page  404 403 500 502 503 504  /404.html;
            location = /404.html {
              root   /usr/local/nginx/html;
            }
            location ~ \.php$ {
                  root           /usr/local/nginx/html;
                  fastcgi_pass   127.0.0.1:9000;
                  fastcgi_index  index.php;
                  fastcgi_param  SCRIPT_FILENAME  /usr/local/nginx/html$fastcgi_script_name;
                  include        fastcgi_params;
                }
            }

在/usr/local/nginx/html目录中创建404.html文件:

[root@rs02 nginx]# vim html/404.html
<!DOCTYPE html>
<html>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"> 
<head>
<title>Error</title>
<style>
    body {
        width: 35em;
        margin: 0 auto;
        font-family: Tahoma, Verdana, Arial, sans-serif;
    }
</style>
</head>
<body>
<h1>错误啦!!!!!!!!!</h1>
<h1>错误啦!!!!!!!!!</h1>
<h1>错误啦!!!!!!!!!</h1>
<h1>错误啦!!!!!!!!!</h1>

启动nginx、mariadb、php服务:

[root@rs02 nginx]# /usr/local/nginx/sbin/nginx
[root@rs02 nginx]# /etc/rc.d/init.d/mariadb start
[root@rs02 nginx]# /etc/rc.d/init.d/php-fpm start

浏览器输入:http://192.168.10.14/haha

效果如下:

image.png

1.2配置访问日志为json格式

在nginx的主配置文件nginx.conf中配置日志的json格式:

[root@rs02 nginx]# vim conf/nginx.conf
worker_processes  1;
events {
    worker_connections  1024;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;
    log_format  json  '{"@timestamp":"$time_iso8601",'
                      '"@version":"1",'
                      '"client":"$remote_addr",'
                      '"url":"$uri",'
                      '"status":"$status",'
                      '"domain":"$host",'
                      '"host":"$server_addr",'
                      '"size":"$body_bytes_sent",'
                      '"responsentime":"$request_time",'
                      '"referer":"$http_referer",'
                      '"useragent":"$http_user_agent",'
                      '"upstreampstatus":"$upstream_status",'
                      '"upstreamaddr":"$upstream_addr",'
                      '"upstreamresponsetime":"$upstream_response_time"'
                       '}';
    access_log  logs/access_json.log  json;
    include /usr/local/nginx/conf.d/*.conf;
}

日志放在nginx安装目录logs中,文件名为access_json.log。

重新加载配置文件,浏览器打开:192.168.10.14,刷新几次,查看日志:

[root@rs02 nginx]# sbin/nginx -s reload
[root@rs02 ~]# tail /usr/local/nginx/logs/access_json.log 
{"@timestamp":"2019-12-02T00:11:56+08:00","@version":"1","client":"192.168.10.1","url":"/404.html","status":"404","domain":"192.168.10.14","host":"192.168.10.14","size":"609","responsentime":"0.000","referer":"-","useragent":"Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko","upstreampstatus":"-","upstreamaddr":"-","upstreamresponsetime":"-"}

2、配置虚拟主机,实现https访问www.x.com(x.com为自己定义的域名)

ssl证书申请:

[root@rs02 ~]#  cd /etc/pki/CA/
[root@rs02 CA]# (umask 077;openssl genrsa -out private/cakey.pem 2048)
….
[root@rs02 CA]# touch serial index.txt
[root@rs02 CA]#  echo 01 > serial
[root@rs02 html]# pwd
/usr/local/nginx/html
[root@rs02 html]#  (umask 077;openssl genrsa -out nginx.key 1024)
[root@rs02 CA]# openssl ca -in /usr/local/nginx/html/nginx.csr  -out nginx.crt -days 3655
[root@rs02 CA]# mv nginx.crt /usr/local/nginx/html/

虚拟主机配置文件修改如下:

自定义域名: www.haha.com

[root@rs02 ~]# vim /usr/local/nginx/conf.d/server.conf
server {
            listen       80;
            listen       443 ssl;
            server_name  www.haha.com;
            #ssl on;
            ssl_certificate /usr/local/nginx/html/nginx.crt;
            ssl_certificate_key /usr/local/nginx/html/nginx.key;

            ssl_protocols       TLSv1 TLSv1.1 TLSv1.2 TLSv1.3;
            ssl_ciphers         HIGH:!aNULL:!MD5;
            location / {
                  root   /usr/local/nginx/html;
                  index  index.php index.html index.htm;
            }
            error_page  404 403 500 502 503 504  /404.html;
            location = /404.html {
              root   /usr/local/nginx/html;
            }
            location ~ \.php$ {
                  root           /usr/local/nginx/html;
                  fastcgi_pass   127.0.0.1:9000;
                  fastcgi_index  index.php;
                  fastcgi_param  SCRIPT_FILENAME  /usr/local/nginx/html$fastcgi_script_name;
                  include        fastcgi_params;
                }
            }

重新reloadnginx,浏览器打开:https://192.168.10.14/

image.png

物理机配置hosts解析:

192.168.10.14 www.haha.com

浏览器打开:

https://www.haha.com/

image.png

OK,成功。

分类: 作业

发表评论

电子邮件地址不会被公开。 必填项已用*标注