企业内部网络--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稳定版,解压安装包
tarzxf nginx-1.12.0.tar.gz ##解压后生成目录nginx-1.12.0
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"
##将对外界仅显示该名称,不再显示版本号,较安全
:wq
2.vim /root/nginx-1.12.0/auto/cc/gcc
注释掉172行,即关闭debug:
172#CFLAGS="$CFLAGS -g"
:wq
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
##当提示信息中提示还缺少某个包时,则对应下载XXX-devel包
yum install pcre-devel openssl-devel -y
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
该命令执行成功时显示内容:
8.make && make install ##表示先编译,若编译成功再执行make install
9.检查nginx安全性及nginx启动:
cd /usr/local/lnmp/nginx ##主目录
du -sh ##文件大小为960K
cd /usr/local/lnmp/nginx/sbin
执行: ./nginx ##开启服务 ##注意路径
netstat -antlp ##查看80端口是否开启
curl -I localost ##显示是否为修改后的内容,不显示版本号:nginx
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(文件描述服务)
##可使用sysctl -a |grep file ##查看fs.file-max
}
##nginx开启一个worker进程
<2>nginx开启的进程数目设置
1.vim conf/nginx.conf
worker_processes 2; ##开启两个worker进程
:wq
2.nginx -t ##检查配置文件是否有语法错误
3.nginx -s reload ##若无语法错误,进行重新加载
4.ps -ax ##查看nginx开启的进程数
<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
:wq
##第一个进程绑定第一个cpu内核;第二个进程绑定第二个进程
2.更改本机cpu数目不少于2个
<4>最大连接数的设置
1.vim conf/nginx.conf
编辑内容:
events{
worker_connections 65535; ##更改最大连接数,但应小于fs.file_max
}
:wq
2.sysctl -a | grep file ##查看fs.file_max,其数目也可更改
3.ulimit -a -u nginx ##查看open file数目是否大于最大连接数
##结果显示的open file为1024,小于设定的最大连接数,所以需要设置open file数目
4.vim /etc/security/limits.conf ##该文件即该即生效
添加内容:
nginx - nofile 65535
##nginx可开启的最大文件数目(应不少于最大连接数),用于控制当进程数目过大时,防止shell fork现象的出现
三、nginx配置
cd /usr/local/lnmp/nginx/ ##进入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;
##密钥与验证信息采用同一文件
:wq
2.自生成认证文件
cd /etc/pki/tls/private
openssl genrsa 2048 > localhost.key ##生成认证文件
cd /etc/pki/tls/certs/
make cert.pem ##自生成证书
部分内容显示如下:
CountryName (2 letter code) [XX]:cn ##两位字符
Stateor Province Name (full name) []:Shaanxi
LocalityName (eg, city) [Default City]:xi'an
OrganizationName (eg, company) [Default Company Ltd]:westos
OrganizationalUnit Name (eg, section) []:linux
CommonName (eg, your name or your server's hostname) []:server1
##主机名
EmailAddress []:[email protected]
mv cert.pem /usr/local/lnmp/nginx/conf/
##nginx配置文件中设置认证文件时,以相对路径设置,其对应绝对路径为/usr/local/lnmp/nginx/conf/nginx.conf
3.nginx -t
nginx -s reload
4.netstat -antlp |grep :443 ##查看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;
##当访问www.westos.org时,永久性重定向至https://www.westos.org
125 }
具体内容参考下图:
2.nginx -t
nginx -s reload
3.访问www.westos.org,看是否会自动转至https://www.westos.org
使用culr命令,查看服务状态:若为301,表示重定向
[root@foundation90 ~]# curl -Iwww.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 ##重定向至https://www.westos.org
七、负载均衡
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
:wq
/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
yum install cmake-2.8.12.2-4.el6.x86_64.rpm -y
##mysql-boost为c++库函数,要求cmake必须时2.8版本以上,gcc-c++;camke编译
2.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.更改权限
chown mysql.mysql . -R ##绝对路径为/usr/local/lnmp/mysql/
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
:wq
source ~/.bash_profile ##使变量文件生效
5.chown root.root . R 绝对路径为/usr/local/lnmp/mysql
6.mysqld --initialize --user=mysql
##初始化,系统将自动生成密码,该密码为用户发第一次登录mysql的密码;
##生成/usr/local/lnmp/mysql/data目录
7.mysql_secure_installation ##修改密码,当前密码为上条命令生成的密码
8.mysql -p ##登录mysql
php安装
一、php安装
1.tzr zxf php-5.6.20.tar.bz2
2.安装包依赖性:
yum install openssl-devel libxml2-devel curl-devel libjpeg-turbo-devel net-snmp-devel
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.复制主配置文件
cp /root/php-5.6.20/php.ini-production /usr/local/lnmp/php/etc/php.ini
##注意配置文件以.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 ##修改时间
:wq
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
:wq
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
:wq
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;
}
:wq
2.编辑php首页文件
cd /usr/local/lnmp/nginx/html
vim index.php
编辑内容:
phpinfo()
?>
:wq
4.浏览器访问172.25.90.1,显示内容为php首页
四、mysql+php+nginx
1.安装软件
unzip Discuz_X3.2_SC_UTF8.zip
##解压后生成目录readme upload utility
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
全文编辑:
pdo_mysql.default_socket=/usr/local/lnmp/mysql/data/mysql.sock
:wq
##数据库连接
5.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