搭建LNMP架构

l:linux unix windows mac
a:apache nginx iis
m:mysql mariadb percona postgressql oracle
p:php jsp xml python
Nginx
一、nginx安装
<1>下载nginx稳定版,解压安装包,解压后生成目录nginx-1.12.0

tar zxf nginx-1.12.0.tar.gz   
cd  /root/nginx-1.12.0

<2>安装nginx,可以使用less README查看最简安装流程,具体实现过程如下
1.编辑该文件,修改版本显示内容,修改后内容为:将对外界仅显示该名称,不再显示版本号,较安全

cd /root/nginx-1.12.0/src/core
vim nginx.h 
14 #define NGINX_VER "nginx"

2.注释掉172行,即关闭debug,快速编译

vim  /root/nginx-1.12.0/auto/cc/gcc
172 #CFLAGS="$CFLAGS -g"

3.创建用户

useradd -M -d /usr/local/lnmp/nginx -u 800 nginx -s /sbin/nologin

其中:-d /usr/local/lnmp/nginx 指定家目录,该目录要与configure执行时指定的目录保持一致,不用提前创建;-u 800 nginx 为保持全网一致,需指定新建用户nginx的UID;-s /sbin/nologin 禁止登录;可以使用id nginx命令来查看用户的UID
4.进入以下目录下执行以下命令

cd /root/nginx-1.12.0   
./configure --prefix=/usr/local/lnmp/nginx --user=nginx --group=nginx --with-threads --with-file-aio --with-http_ssl_module --with-http_stub_status_module

解释:–prefix=/usr/local/lnmp/nginx 指定安装路径;–user=nginx –group=nginx 指定使用用户;–with-http_ssl_module –with-http_stub_status_module 导入ssl和状态模块
5.在执行4中的命令时会有报错或者提示信息,需要再安装:pcre-devel 和 openssl-devel

yum install pcre-devel openssl-devel -y

注意:当提示信息中提示还缺少某个包时,则对应下载XXX-devel包
7.重新执行4.中的命令,注意当前位置:/root/nginx-1.12.0/

./configure --prefix=/usr/local/lnmp/nginx --user=nginx --group=nginx --with-threads --with-file-aio --with-http_ssl_module --with-http_stub_status_module

该命令执行成功时显示内容:

  1. 先编译,若编译成功再执行make install
make && make install 

9.检查nginx安全性及nginx启动:
先进入主目录

cd /usr/local/lnmp/nginx

查看文件大小,将显示为960k

du -sh

开启服务,注意路径

cd /usr/local/lnmp/nginx/sbin
./nginx

查看80端口是否开启

netstat  -antlp 

测试其显示是否为修改后的内容,即不显示版本号:nginx

curl  -I  localost

软链接,方便启动

ln  -s  /usr/local/lnmp/nginx/sbin/nginx  /sbin

二、nginx开启的进程
注意:对nginx的操作只能是在指定家目录(如本机指定的是/usr/local/lnmp/nginx)中,源文件的更改对nginx服务本身不起作用。
<1>修改主配置文件,注意路径

cd  /usr/local/lnmp/nginx
vim   conf/nginx.conf       
部分语句解释:
    worker_processes  1;##nginx开启的worker进程数
    events {
            worker_connections  1024;   
    ##内核允许的最大连接数,应小于fs.file(文件描述服务)         
        }

查看fs.file-max

sysctl  -a  | grep  file

此配置结果:nginx开启一个worker进程
<2>nginx开启的进程数目设置
1.开启两个worker进程的设置,注意路径

vim conf/nginx.conf
worker_processes  2;

2.检查配置文件是否有语法错误

nginx -t    
  1. 若无语法错误,进行重新加载
nginx -s reload
  1. 查看nginx开启的进程数
ps -ax

<3>进程与cpu内核的绑定:??
(1)worker实际是与真实CPU核心绑定,而不是逻辑核心;
(2)尽量一个worker进程绑定一个cpu,若一个worker绑定多个cpu,又cpu本身不能轮询,这样会使得上下文切换较麻烦;
(3)nginx与cpu绑定必须重启服务 ??
1.开启两个进程的配置

vim  conf/nginx.conf
    worker_processes  2;    
    worher_cpu_sffinity  01  10;

解释:01表示启用第一个cpu;02表示启用第二个cpu;
第一个进程绑定第一个cpu内核;第二个进程绑定第二个进程
2.更改本机cpu数目不少于2个
<4>最大连接数的设置
1.更改最大连接数,但应小于fs.file_max

vim conf/nginx.conf
events {
        worker_connections  65535;  
        }

2.查看fs.file_max,其数目也可更改

sysctl -a  | grep file

3.查看open file数目是否大于最大连接数

ulimit -a -u nginx

结果显示的open file为1024,小于设定的最大连接数,所以需要设置open file数目
4.vim /etc/security/limits.conf ##该文件即该即生效
添加内容:

nginx  -  nofile  65535

注意:nginx可开启的最大文件数目(应不少于最大连接数),用于控制当进程数目过大时,防止shell fork现象的出现
三、nginx配置
进入nginx根目录

cd /usr/local/lnmp/nginx/

<1>nginx页面
1.vim conf/nginx.conf
在http{}函数内添加内容:

server {
        listen 80;
        server_name www.westos.org;
        location / {
                root  /web1;
                index index.html;
                }
        }
##控制调用过滤器,该location相对于网页的路径为/,也可以是相对于网页的目录。
##root /web1;  定义根目录,必须是已存在的
##index  index.html; 发布文件为index.html 

2.编辑发布内容

mkdir /web1
vim /web1/index.html    ##内容随意

3.nginx -t ##检查语法错误
nginx -s reload
4.测试:浏览器访问www.westos.org或者172.25.13.1

以下实验均在172.25.90.1主机操作

四、开启443端口
1.vim conf/nginx.cong 注意路径
去掉97至114行443端口的注释
修改内容:密钥与验证信息采用同一文件

102         ssl_certificate_key  cert.pem;

2.自生成认证文件

cd /etc/pki/tls/private
openssl genrsa 2048 > localhost.key ##生成认证文件
cd  /etc/pki/tls/certs/
make cert.pem       ##自生成证书

部分内容显示如下:


    Country Name (2 letter code) [XX]:cn    ##两位字符
    State or Province Name (full name) []:Shaanxi   
    Locality Name (eg, city) [Default City]:xi'an
    Organization Name (eg, company) [Default Company Ltd]:westos
    Organizational Unit Name (eg, section) []:linux
    Common Name (eg, your name or your server's hostname) []:server1
                        ##主机名
    Email Address []:bai@qq.com
  mv  cert.pem  /usr/local/lnmp/nginx/conf/

注意:nginx配置文件中设置认证文件时,以相对路径设置,其对应绝对路径为/usr/local/lnmp/nginx/conf/nginx.conf
3.nginx -t
nginx -s reload
4. 查看443端口是否开启

netstat  -antlp |grep :443

5.访问https:172.25.90.1

五、网页监控
1.vim conf/nginx.conf
在http{}函数中添加如下内容:

location  /status { 
            stub_status on;
            access_log off;
            allow 127.0.0.1;
    }

解释:/status:虚拟目录。因为在安装前已加入了–with-http_stub_status_module模块;stub_status on; 表示激活该模块功能;access_log off; 表示关闭日志;allow 172.25.90.250; 允许该主机访问

2.nginx -t
nginx -s reload
3.访问172.25.90.1/status
(1)Active connections:表示访问数

(2)每连接依次,请求量刷新一次server accepts handled requests

5.deny语句来限制访问,如:
vim conf/nginx.conf
在http{}函数中添加如下内容:

    location  /status { 
            stub_status on;
            access_log off;
            allow 172.25.90.250;
            deny  all;
    }

解释:拒绝所有用户访问,仅允许172.25.90.250主机

六、网页重写

cd /usr/local/lnmp/nginx

1.vim conf/nginx.conf
编辑内容:

103     server {
104         listen       443 ssl;
105         server_name  www.westos.org;
117         root   /web1;       ##www.westos.org的发布目录
121         server {
122              listen 80;
123              server_name www.westos.org;
124              rewrite ^(.*)$ https://www.westos.org permanent;
125                 }

解释:当访问www.westos.org时,永久性重定向至https://www.westos.org
注意:临时重定向可用redirecty
具体内容参考下图:

2.nginx -t
nginx -s reload
3.访问www.westos.org,看是否会自动转至https://www.westos.org
使用culr命令,查看服务状态:若为301,表示重定向

[root@foundation90 ~]# curl -I www.westos.org
HTTP/1.1 301 Moved Permanently  ##301表示重定向,永久性的
Server: nginx
Date: Sun, 23 Jul 2017 12:51:33 GMT
Content-Type: text/html
Content-Length: 178
Connection: keep-alive
Location: https://www.westos.org

Location表示:重定向至https://www.westos.org

4.目录重定向
vim conf/nginx.conf
编辑内容:

121 server {
122         listen 80;
123         server_name www.westos.org;
124         rewrite ^(.*)$ https://www.westos.org$1 permanent;
125         }

解释:当访问www.westos.org网页下的任意目录时,将直接通过proxy重定向至upstream模块
创建重定向目录

mkdir /web1/admin –p

vim /web1/admin/index.html ##编辑发布目录

<h1>admin.pageh1>

5 nginx –t ##检测语法
nginx -s reload ##重载服务
6.测试:浏览器访问www.westos.org/admin,或使用curl命令

七、负载均衡
1.vim conf/nginx.conf
在http{}中加入upstream模块

  upstream westos {     ###均衡器westos
    server 172.25.90.2:80;
    server 172.25.90.3:8080;
    }

编辑www.westos.org的server模块

   server {
            listen 80;
            server_name www.westos.org;         
            }
    location / {
    proxy_pass http://westos;   ##proxy代理
    }

解释:当访问www.westos.org时,nginx通过proxy_pass反向代理模块,将请求转至upsream均衡器模块,从而达到负载均衡的目的
2.在1.中选择172.25.90.2的80端口–http默认监听端口;172.25.90.3的8080端口,所以需要更改172.25.90.3的http监听端口为8080
vim /etc/httpd/conf/httpd.conf

 136 Listen 8080
/etc/init.d/httpd restart

3.编辑首页

4.nginx -t
nginx -s reload
5.访问www.westos.org
或使用curl命令,且不断访问,观察响应结果是否轮询

6.健康检查:当后台服务端均宕掉时,访问时不需等待直接502报错
(1)vim conf/nginx.conf
编辑upstream模块:

upstream westos {       ###均衡器westos
        server 172.25.90.2:80;
        server 172.25.90.3:8080;
        server  127.0.0.1:8000  backup; ##502报错
        }

(2)修改172.25.90.1的httpd监听端口为8000

(3)编辑报错首页–nginx服务端(172.25.90.1)
vim /etc/httpd/conf/httpd.conf
网络正在维护中…
:wq
(4)nginx -t
nginx -s reload
(5)测试
关闭后台服务器–172.25.90.2,172.25.90.3:/etc/init.d/httpd stop
访问www.westos.org

7.权重
如设置172.25.90.2服务端的权中重为2,设置及访问结果见下图:

Mysql
一、Mysql安装
1.软件包依赖性:

yum install -y gcc gcc-c++ make ncurses-devel bison openssl-devel zlib-devel cmake-2.8.12.2-4.el6.x86_64.rpm

解释:mysql-boost为c++库函数,要求cmake必须时2.8版本以上,gcc-c++;camke编译
2.源码安装mysql

tar  zxf  mysql-5.5.12.tar.gz

3.编译

cd  /root/mysql-5.5.12
cmake -DCMAKE_INSTALL_PREFIX=/usr/local/lnmp/mysql -DMYSQL_DATADIR=/usr/local/lnmp/mysql/data -DMYSQL_UNIX_ADDR=/usr/local/lnmp/mysql/data/mysql.sock -DWITH_MYISAM_STORAGE_ENGINE=1 -DWITH_INNOBASE_STORAGE_ENGINE=1 -DDEFAUL=utf8 -DDEFAUL_COLLATION=utf8_general_ci -DEXTRA_CHARSSETS=all -DWITH_BOOST=boost/boost_1_59_0/

解释:-DCMAKE_INSTALL_PREFIX=/usr/local/lnmp/mysql 指定安装路径;-DMYSQL_DATADIR=/usr/local/lnmp/mysql/data 指定数据库目录,一定与安装路径同;-DMYSQL_UNIX_ADDR=/usr/local/lnmp/mysql/data/mysql.sock 支持本地客户端连接;-DWITH_MYISAM_STORAGE_ENGINE=1 为1时表示安装archive 存储引擎;-DWITH_INNOBASE_STORAGE_ENGINE=1 为1时表示安装数据存储引擎;-DDEFAUL=utf8 安装默认字符集;-DDEFAUL_COLLATION=utf8_general_ci 安装校验字符集;-DEXTRA_CHARSSETS=all;-DWITH_BOOST=boost/boost_1_59_0/ 指定相对路径??
4.编译成功后,根据提示信息,清除旧的对象文件和缓存信息

make clean
rm -f CmakeCache.txt

5.重新编译,并安装:

make && make install

二、数据库初始化

cd  /usr/local/lnmp/mysql

1.创建mysql的使用用户,指定用UID

groupadd -g 27 mysql
useradd -u 27 -g 27 -s /sbin/nologin -M -d  /usr/local/lnmp/mysql/ mysql

2.更改权限,绝对路径为/usr/local/lnmp/mysql/

chown mysql.mysql . -R

3.复制主配置文件

cd /usr/local/lnmp/mysql/support-files/
cp /etc/my.cnf /etc/my.cng.bak  ##备份
cp my-default.cnf /etc/my.cnf
cp mysql.server /etc/init.d/mysqld  ##服务开启项

4.vim ~/.bash_profile
编辑内容:

PATH=$PATH:$HOME/bin:/usr/local/lnmp/mysql/bin

使变量文件生效

source ~/.bash_profile

5.更改权限,绝对路径为/usr/local/lnmp/mysql/

chown root.root . R

6.初始化数据库,系统将自动生成密码,该密码为用户发第一次登录mysql的密码,将生成/usr/local/lnmp/mysql/data目录

mysqld --initialize --user=mysql

7.更改权限,绝对路径为/usr/local/lnmp/mysql/data/

chown mysql data -R

8.修改密码,当前密码为上条命令生成的密码

mysql_secure_installation

9.登录mysql

mysql -p

php安装
一、php安装
1.tzr zxf php-5.6.20.tar.bz2
2.安装包依赖性:

yum install -y openssl-devel libxml2-devel curl-devel libjpeg-turbo-devel net-snmp-devel libpng-devel-1.2.49-1.el6_2.x86_64 freetype-devel gmp-devel-4.3.1-7.el6_2.2.x86_64
rpm -ivh libmcrypt-*

3.源码编译

cd  /root/php-5.6.20    
./configure --prefix=/usr/local/lnmp/php --with-config-file-path=/usr/local/lnmp/php/etc --with-mysql=mysqlnd --with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd --with-openssl --with-snmp --with-gd --with-zlib --with-curl --with-libxml-dir --with-png-dir --with-jpeg-dir --with-freetype-dir --with-gmp --with-gettext --enable-inline-optimization --enable-soap --enable-ftp --enable-sockets --enable-mbstring --enable-fpm --with-fpm-user=nginx --with-fpm-group=nginx --with-mcrypt --with-mhash

补充:如何知道软件依赖性??
先进行源码编译,因为加入了各个模块,系统若没有相应的软件会有类似于如下图所示的提示:

若是缺少XX包则直接下载 “XX-devel”;若提醒没有XX.h,即没有头文件,则先使用命令查看提供该头文件的软件“yum provides */png.h”,再下载对应的安装包。
4.编译成功后,再次编译并安装

make && make install

二、配置
1.复制主配置文件,注意配置文件以.ini结尾

cp  /root/php-5.6.20/php.ini-production  /usr/local/lnmp/php/etc/php.ini    

给启动脚本以执行权限,作为启动项

cp  /root/php-5.6.20/sapi/fpm/init.d.php-fpm  /etc/init.d/php-fpm
chmod  +x  /etc/init.d/php-fpm

2.vim /usr/local/lnmp/php/etc/php.ini
编辑内容:

date.timeout = Asia/Shanghai    ##修改时间

3.

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

vim /usr/local/lnmp/php/etc/php-fpm.conf
去掉以下内容的注释:

pid = run/php-fpm.pid

4./etc/init.d/php-fpm start
5.cd /usr/local/lnmp/php
vim ~/.bash_profile
编辑内容:

PATH=$PATH:$HOME/bin:/usr/local/lnmp/mysql/bin:/usr/local/lnmp/php/bin

使变量文件生效

source ~/.bash_profile

6.php-fpm监听9000端口,可用命令netstat -antlp | grep php-fpm来查看
三、php+nginx
1.cd /usr/local/lnmp/nginx/conf
vim nginx.conf
去掉以下内容注释,并进行修改:

location ~ \.php$ {
root           html;
fastcgi_pass   127.0.0.1:9000;
fastcgi_index  index.php;
include        fastcgi.conf;
        }

fastcgi_pass 指定发送给某个用户;fastcgi_index 首页文件为index.php;include fastcgi.conf 该文件包含默认发布目录
更改nginx根用户的发布文件默认为index.php:

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

再保存退出文件
2.编辑php首页文件
cd /usr/local/lnmp/nginx/html
vim index.php
编辑内容:


:wq

5.浏览器访问172.25.90.1,显示内容为php首页

四、mysql+php+nginx—搭建论坛
1.安装软件,解压后生成目录readme upload utility

unzip Discuz_X3.2_SC_UTF8.zip

2.mv upload /usr/local/lnmp/nginx/html/bbs
3.cd /usr/local/lnmp/nginx/html/bbs
给权限

 chmod 777 config/ data/ uc_client/ uc_server/ -R

4.cd /usr/local/lnmp/php/etc
vim php.ini
全文编辑:

1002 pdo_mysql.default_socket=/usr/local/lnmp/mysql/data/mysql.sock
1145 mysql.default_port = 3306
1150 mysql.default_socket = /usr/local/lnmp/mysql/data/mysql.sock

数据库连接
5.浏览器访问172.25.90.1/bbs

点击同意进行下一步:

Php-fpm安装正常时显示内容如上,再点击进行下一步:

如上:数据库密码即为初始化时用户自己设置的密码;管路员密码可自己进行设定,再下一步进行安装数据库

如上显示报错,根据提示信息,可知将要进行较为关键一步:php-fpm与数据库的连接
vim /usr/local/lnmp/php/etc/php.ini
设置内容为连接点、数据库默认监听端口3306:

1002 pdo_mysql.default_socket=/usr/local/lnmp/mysql/data/mysql.sock
1145 mysql.default_port = 3306
1150 mysql.default_socket = /usr/local/lnmp/mysql/data/mysql.sock

重载服务

/etc/init.d/php-fpm reload

6.查看数据库权限,应确保nginx用户对数据库有读写权限

[root@server1 mysql]# ll -d data/               
drwxr-x--- 5 mysql root 4096 Sep  3 01:57 data/

如上可看出数据库的data/目录,对于nginx用户没有读权限
给数据库访问权限

chmod 755 /usr/local/lnmp/mysql/data

6./etc/init.d/php-fpm reload
7.浏览器端进行刷新,即可进入安装mysql界面,安装成功后即可登录
根据提示信息,要求删除install/index.php

进入管理中心,将显示如上图中的内容
8.rm -fr /usr/local/lnmp/nginx/install/index.php
注意:nginx的根目录为usr/local/lnmp/nginx

五、nginx+memcached:提高命中缓存
<1>安装

yum remove php php-common-5.3.3-26.el6.x86_64 php-cli-5.3.3-26.el6.x86_64

查看可加在模块

php -m

<2>源码安装memecache

tar zxf memcache-2.2.5.tgz
phpize

phpize命令知道源码安装的信息,并将其全部显示出来,这样就可以进行”源码安装三部曲”

<3>编译安装

cd /root/memcache-2.2.5
./configure
make && make install

<4>vim /usr/local/lnmp/php/etc/php.ini

 871 extension=memcache.so

<5>/etc/init.d/php-fpm reload
<6>yum install -y memcached
将开启9000端口:

/etc/init.d/memcached start

<7>测试:可以使用telnet命令来连接fastcgi
安装telnet服务来连接memcache,也可以通过python实现连接

yum install telnet –y                   
[root@server1 memcache-2.2.5]# telnet localhost 11211   
Trying ::1...
Connected to localhost.
Escape character is '^]'.
set name 0 0 6      ##设置变量,格式:序号 过期时间 长度(过期时间为0表示不过期)
westos              ##变量
STORED
get name            ##查看变量
VALUE name 0 6
westos
END
delete name         ##删除变量
DELETED
get name
END

<8> memcache与nginx连接

cp example.php /usr/local/lnmp/nginx/html/           
cp memcache.php /usr/local/lnmp/nginx/html/

解释:memcache将数据缓存至example.php,默认会截取内存空间的64M作为缓存空间;memcache.php用来查看缓存命中率
vim /usr/local/lnmp/nginx/html/memcache.php ##提供动态页面

20 $VERSION='$Id: memcache.php,v 1.2 2008/09/11 19:21:06 mikl Exp $';
 21 
 22 define('ADMIN_USERNAME','admin');       // Admin Username
 23 define('ADMIN_PASSWORD','redhat');      // Admin Password
 24 define('DATE_FORMAT','Y/m/d H:i:s');
 25 define('GRAPH_SIZE',200);
 26 define('MAX_ITEM_DUMP',50);
 27 
 28 $MEMCACHE_SERVERS[] = '127.0.0.1:11211'; // add more as an array
29 //$MEMCACHE_SERVERS[] = 'mymemcache-server2:11211'; // add more as an array

<9>测试:访问172.25.90.1/memcache.php

用户名:admin;用户密码:redhat,即为memcache文件中的配置

如上缓存命中率为50%,总memcache空间为64M
六、高并发:openstry
<1> tar zxf openresty-1.11.2.3.tar.gz
安装地址:http://openstry.tar.gz
<2>编译安装:

cd /root/openresty-1.11.2.3
./configure

根据编译结果,接下来执行gmake && gmake install

gmake  && gmake install
cd  /usr/local/opensty
Vim  nginx/conf/nginx.conf
    2 user  nginx;
    12 events {
    13     worker_connections  65535;
    14 }
    17 http {           .......
    18         upstream memcached {
    19                 server 127.0.0.1:11211;
    20         }

<3>测试:使用命令:ac –c100 –n 50000 http://www.westos.org

你可能感兴趣的:(lnmp)