首页 文章 精选 留言 我的

精选列表

搜索[企业级],共10000篇文章
优秀的个人博客,低调大师

基于Centos6.x企业级LNMP架构搭建实例

阅读目录 1.1 部署LNMP架构说明 第2章 LNMP环境搭建步骤 2.1 部署linux系统 2.2 部署nginx网站服务 2.3 部署mysql数据库服务 2.4 部署php服务 2.5 nginx 与 php 建立连接关系 2.6 编辑php与mysql连通性测试文件,并进行测试 2.7 测试php与数据库连通性 2.8 下载部署wordpress博客程序 3.1 mysql数据库迁移 3.2 本地数据挂载到nfs共享储存 回到顶部 1.1 部署LNMP架构说明 1.1.1 LNMP架构内容 01.部署linux系统 02.部署nginx网站服务 03.部署mysql数据库服务 04.部署php动态解析服务 1.1.2 配置LNMP架构步骤 01.配置Nginx配置文件 02.配置mysql数据库信息(SQL语句) 03.配置wordpress博客网站 1.1.3 架构服务器串联 01.数据库数据信息迁移(web服务器上的mysql数据 迁移到10.0.0.51 数据库服务器上) 02.将本地储存数据挂载到NFS共享储存服务器里(共享储存用户上传的数据信息) 1.1.4 LNMP FastCGI知识说明 工作原理讲解说明: ①. 用户请求的静态文件,由nginx服务自行处理,根据静态的location配置进行处理 用户请求的动态文件,由php服务进行处理,根据动态的location配置进行处理 ②. nginx服务接收到动态请求,会将请求抛送给fastcgi,类似于nginx服务接收动态请求的秘书,秘书会将动态请求送给PHP程序 ③. PHP如果可以处理,会将处理结果直接通过fastcgi返回给nginx程序;如果不可以处理,还会请求后端数据库,最终再把处理结果返回给nginx 回到顶部 第2章 LNMP环境搭建步骤 回到顶部 2.1 部署linux系统 基本优化(ip地址 yum更新 字符集) 安全优化完成(iptables关闭 selinux关闭 tmp目录权限777) 说明:详细配置参见https://www.cnblogs.com/znix/p/7736899.html 回到顶部 2.2 部署nginx网站服务 2.2.1 检查软件安装的系统环境 [root@web01 ~]# cat /etc/redhat-release CentOS release 6.9 (Final) [root@web01 ~]# uname -r 2.6.32-696.el6.x86_64 2.2.2 安装nginx的依赖包(pcre-devel openssl-devel) yum install -y pcre-devel openssl-devel pcre:兼容perl语言正则表达式,perl compatible regular expressions rewirte模块 参数信息(perl方式定义正则表达式) openssl:ssh---openssh/openssl---https 总结:所有安装依赖软件,后面都要加上-devel 2.2.3 下载nginx软件 wget http://nginx.org/download/nginx-1.10.2.tar.gz 说明:软件很小,用心查看一下 解压软件 tar xf nginx-1.10.2.tar.gz 2.2.4 创建管理用户 www useradd -M -s /sbin/nologin www 2.2.5 nginx软件编译安装过程 2.2.5.1注意 软件编译安装步骤 a>软件解压配置(将软件程序安装到哪个目录中 开启nginx软件的哪些功能) b>软件编译过程 c>软件编译安装过程 注意顺序,顺序不对软件安装会出错 2.2.5.2编译安装软件 1、配置软件,在软件的解压目录中 [root@web01 nginx-1.10.2]# ./configure --prefix=/application/nginx-1.10.2 --user=www --group=www --with-http_stub_status_module --with-http_ssl_module 编译参数说明: --prefix 表示指定软件安装到哪个目录中,指定目录不存在会自动创建 --user/--group nginx工作进程由哪个用户运行管理 --with-http_stub_status_module 启动nginx状态模块功能(用户访问nginx的网络信息) --with-http_ssl_module 启动https功能模块 通过软件编译过程中的返回值是否正确,确认配置是否正确 [root@web01 nginx-1.10.2]# echo $? 0 2、编译软件 [root@web01 nginx-1.10.2]# make 3、编译安装 [root@web01 nginx-1.10.2]# make install 2.2.6 创建软连接 [root@web01 application]# ln -s /application/nginx-1.10.2/ /application/nginx 2.2.7 精简化nginx.conf 主配置文件内容, 编写nginx配置文件 [root@web01 conf]# egrep -v "#|^$" nginx.conf.default >nginx.conf 2.2.8 启动程序 [root@web01 application]# /application/nginx/sbin/nginx [root@web01 application]# 检查是否启动 [root@web01 application]# ps -ef |grep nginx root 26548 1 0 20:13 ? 00:00:00 nginx: master process /application/nginx/sbin/nginx www 26549 26548 0 20:13 ? 00:00:00 nginx: worker process root 26551 23431 3 20:13 pts/0 00:00:00 grep --color=auto nginx 检查端口信息 [root@web01 application]# netstat -lntup |grep 80 tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 26548/nginx 服务部署完成, 修改hosts解析文件,进行浏览器访问测试 至此软件安装完毕! 回到顶部 2.3 部署mysql数据库服务 2.3.1 下载mysql软件 这里使用的是5.6.34版本;在下载mysql的时候一定要注意与系统匹配的版本。 mysql-5.6.34-linux-glibc2.5-x86_64.tar.gz 方法一:mysql官网下载地址 https://dev.mysql.com/downloads/mirrors/ 尽量使用ftp下载,http的下载方式较为繁琐。下载的时候选择与自己近的服务进行下载即可。 方法二: 使用搜狐的镜像站也可以进行下载,注意使用的软件版本。 http://mirrors.sohu.com/mysql/ 2.3.2 【二进制包方式】安装mysql数据库软件 2.3.2.1解压二进制包软件🔥 cd /server/tools/ [root@web01 tools]# tar xf mysql-5.6.34-linux-glibc2.5-x86_64.tar.gz 2.3.2.2创建储存目录管理用户mysql🔥 [root@web01 tools]# useradd -s /sbin/nologin -M mysql 2.3.2.3将解压后的二进制包放置到程序目录中🔥 将mysql解压后的程序包搬家到程序目录下,并创建软连接。 cd /server/tools/ mv mysql-5.6.34-linux-glibc2.5-x86_64 /application/mysql-5.6.34 ln -s /application/mysql-5.6.34 /application/mysql 2.3.2.4对mysql数据储存目录进行授权🔥 让mysql用户管理 /application/mysql/data [root@web01 ~]# chown -R mysql.mysql /application/mysql/data/ [root@web01 ~]# ll /application/mysql/data/ -d drwxr-xr-x 3 mysql mysql 4096 Oct 26 11:26 /application/mysql/data/ 2.3.2.5初始化数据库服务🔥 /application/mysql/scripts/mysql_install_db --basedir=/application/mysql --datadir=/application/mysql/data --user=mysql ①始化参数说明: --basedir数据库软件命令,软件安装在哪里 --datadir数据存放目录,数据存放在哪里 --user管理mysql的用户,MySQL使用的用户谁 ②【*】判定初始化命令执行成功的方法 1)确认返回值,看是否为0 [root@web01 ~]#echo$? 2)确认输出的内容中有两个ok 3)通过数据库初始化操作,在data目录中创建出默认的数据库信息和相关表信息 [root@web01 ~]# ls -l /application/mysql/data/ total 110604 -rw-rw---- 1 mysql mysql 12582912 Oct 26 11:56 ibdata1 -rw-rw---- 1 mysql mysql 50331648 Oct 26 11:56 ib_logfile0 -rw-rw---- 1 mysql mysql 50331648 Oct 26 11:56 ib_logfile1 drwx------ 2 mysql mysql 4096 Oct 26 11:56 mysql drwx------ 2 mysql mysql 4096 Oct 26 11:56 performance_schema drwxr-xr-x 2 mysql mysql 4096 Oct 26 11:26 test ③初始化输出的内容信息 To start mysqld at boot time you have to copy support-files/mysql.server to the right place for your system 启动mysql服务,可以复制support-files/mysql.server到系统的启动目录中 mysql.server程序自带的启动脚本文件 PLEASE REMEMBER TO SET A PASSWORD FOR THE MySQL root USER ! To do so, start the server, then issue the following commands: /application/mysql/bin/mysqladmin -u root password 'new-password' /application/mysql/bin/mysqladmin -u root -h web01 password 'new-password' 说明: 表示对mysql服务管理源root用户设置密码 You can start the MySQL daemon with: cd . ; /application/mysql/bin/mysqld_safe & 可以以后台方式运行 mysqld_safe 脚本命令,也可以运行mysql服务 2.3.2.6将启动脚本文件复制到启动目录中🔥 [root@web01 ~]# cp -a /application/mysql/support-files/mysql.server /etc/init.d/mysqld 修改启动服务脚本相关文件内容--更改软件的存放目录 注意:修改的是两个位置 sed -i 's#/usr/local/mysql#/application/mysql#g' /application/mysql/bin/mysqld_safe /etc/init.d/mysqld 添加到开机自启动,让chkconfig 管理,能够开机自启动 [root@web01 ~]# chkconfig --add mysqld [root@web01 ~]# chkconfig mysqld on 2.3.2.7设置mysql服务配置文件🔥 mysql默认配置文件保存位置 /etc/my.cnf 从软件中复制出来配置文件,使用软件中自带的配置文件即可 \cp /application/mysql/support-files/my-default.cnf /etc/my.cnf 2.3.2.8启动mysql服务🔥 [root@web01 ~]# /etc/init.d/mysqld start Starting MySQL...... SUCCESS! 2.3.2.9检查端口信息,确认服务是否启动🔥 [root@web01 ~]# netstat -lntup |grep 3306 tcp 0 0 :::3306 :::* LISTEN 54042/mysqld 2.3.2.10设置root用户密码信息🔥 [root@web01 ~]# /application/mysql/bin/mysqladmin -u root password 'clsn123' Warning: Using a password on the command line interface can be insecure. 2.3.2.11测试 [root@web01 ~]# /application/mysql/bin/mysql -uroot -pclsn123 Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 14 Server version: 5.6.34 MySQL Community Server (GPL) Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql> 登录数据库命令简化方法 echo 'export PATH=/application/mysql/bin:$PATH' >>/etc/profile source /etc/profile which mysql 2.3.3 管理mysql数据库 2.3.3.1 查看数据库 mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | | test | +--------------------+ 4 rows in set (0.26 sec) 2.3.3.2 查看数据表信息 mysql> use mysql;show tables; Reading table information for completion of table and column names You can turn off this feature to get a quicker startup with -A Database changed +---------------------------+ | Tables_in_mysql | +---------------------------+ | columns_priv | | db | | event | | func | | general_log | | help_category | | help_keyword | | help_relation | | help_topic | | innodb_index_stats | | innodb_table_stats | | ndb_binlog_index | | plugin | | proc | | procs_priv | | proxies_priv | | servers | | slave_master_info | | slave_relay_log_info | | slave_worker_info | | slow_log | | tables_priv | | time_zone | | time_zone_leap_second | | time_zone_name | | time_zone_transition | | time_zone_transition_type | | user | +---------------------------+ 28 rows in set (0.00 sec) 2.3.3.3 退出数据库 quit | exit 退出数据库时,尽量不要用ctrl+c进行退出mysql 用ctrl+d进行退出 数据库基础操作(数据库框架) show databases; <--- 查询默认的数据库信息 create database clsn; <---创建新的数据库 drop database clsn; <---删除存在的数据库 use mysql; <--- 表示选择使用一个数据库,相当于cd进入一个数据库 show tables; <---查看数据库中表信息 select database(); <--- 表示查看当前所在数据库,类似于pwd命令的功能 select user(); <--- 查看当前登录数据库的用户,类似于whoami命令 并且mysql还可以限制指定用户可以从哪里进行连接登录数据库 select * from user\G; <---查看user表中所有信息,并且纵行显示 select user,host from user; ---查看user表中指定信息,并且横行显示 select user,host from mysql.user; ---查看可以登录mysql数据库的目录,以及都可以从哪里进行管理mysql数据库 grant all on *.* to user@'host' identified by 'clsn123'; ---创建用户 grant all on *.* to Old_Boy@'localhost' identified by 'clsn123'; ---创建用户(大写用户) drop user 'user'@'host'; flush privileges; --- 刷新权限 回到顶部 2.4 部署php服务 2.4.1 解决PHP软件的依赖关系(14个依赖包) 2.4.1.1基于base源的个依赖包 yum install zlib-devel libxml2-devel libjpeg-devel libjpeg-turbo-devel libiconv-devel freetype-devel libpng-devel gd-devel libcurl-devel libxslt-devel libxslt-devel -y 检查的方法一:rpm rpm -qa zlib-devel libxml2-devel libjpeg-devel libjpeg-turbo-devel libiconv-devel freetype-devel libpng-devel gd-devel libcurl-devel libxslt-devel 检查的方法二:再安装一遍即可确认是否都安装上 yum install -y zlib-devel libxml2-devel libjpeg-devel libjpeg-turbo-devel libiconv-devel freetype-devel libpng-devel gd-devel libcurl-devel libxslt-devel 2.4.1.2libiconv软件和字符集转换相关软件 由于该软件yum安装不上,需要单独安装一下。 mkdir -p /server/tools cd /server/tools #wget http://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.14.tar.gz tar zxf libiconv-1.14.tar.gz cd libiconv-1.14 ./configure --prefix=/usr/local/libiconv make make install 说明:此软件在centos6.8之后已经自带此软件功能,可以不进行安装 编译好的软件如何删除 删除安装后的程序目录即可 fpm定制rpm包 rpm包制作软件---把编译后的程序目录进行打包,通过fpm相关参数指定rpm解压之前要先安装哪些依赖 2.4.1.3安装加密相关的依赖软件(3个) 这三个软件依赖与epel源 yum -y install libmcrypt-devel mhash mcrypt rpm -qa libmcrypt-devel mhash mcrypt 2.4.2 编译安装php过程 解压安装包 cd /server/tools/ [root@web01 lnmp]# tar xf php-5.5.32.tar.gz 配置php(配置的参数较多) mysqlnd本地没有mysql ./configure \ --prefix=/application/php-5.5.32 \ --with-mysql=mysqlnd \ --with-pdo-mysql=mysqlnd \ --with-iconv-dir=/usr/local/libiconv \ --with-freetype-dir \ --with-jpeg-dir \ --with-png-dir \ --with-zlib \ --with-libxml-dir=/usr \ --enable-xml \ --disable-rpath \ --enable-bcmath \ --enable-shmop \ --enable-sysvsem \ --enable-inline-optimization \ --with-curl \ --enable-mbregex \ --enable-fpm \ --enable-mbstring \ --with-mcrypt \ --with-gd \ --enable-gd-native-ttf \ --with-openssl \ --with-mhash \ --enable-pcntl \ --enable-sockets \ --with-xmlrpc \ --enable-soap \ --enable-short-tags \ --enable-static \ --with-xsl \ --with-fpm-user=www \ --with-fpm-group=www \ --enable-ftp \ --enable-opcache=no PHP编译参数详解 View Code PHP编译参数详解 输出的信息 Generating files configure: creating ./config.status creating main/internal_functions.c creating main/internal_functions_cli.c +--------------------------------------------------------------------+ | License: | | This software is subject to the PHP License, available in this | | distribution in the file LICENSE. By continuing this installation | | process, you are bound by the terms of this license agreement. | | If you do not agree with the terms of this license, you must abort | | the installation process at this point. | +--------------------------------------------------------------------+ Thank you for using PHP. 防错 ln -s /application/mysql/lib/libmysqlclient.so.18 /usr/lib64/ touch ext/phar/phar.phar 编译 &&编译安装 make && make install 2.4.3 PHP软件程序创建软链接 ln -s /application/php-5.5.32/ /application/php 2.4.4 配置php解析文件/配置php-fpm配置文件 两个默认的配置文件区别 cd /server/tools/php-5.5.32 ll php.ini* -rw-r--r--. 1 1001 1001 69236 2016-02-02 21:33 php.ini-development -rw-r--r--. 1 1001 1001 69266 2016-02-02 21:33 php.ini-production 配置文件说明: php.ini-developments是开发人员调试用配置文件 php.ini-production是生产常见所有配置文件 文件区别对比: 生产的文件不会输出过多的日志信息,而开发文件会输出大量程序测试日志信息。 对比俩个文件不同的命令 diff / vimdiff 复制配置文件(2个) # 创建软连接 : ln -sf /application/php-5.5.32 /application/php [root@web01 ~]#cd /server/tools/php-5.5.32 [root@web01 php-5.5.32]# cp php.ini-production /application/php/lib/php.ini [root@web01 etc]# cd /application/php/etc/ [root@web01 etc]# cp php-fpm.conf.default php-fpm.conf 2.4.5 启动php-fpm程序 [root@web01 ~]# /application/php/sbin/php-fpm 确认php 9000端口是否正确启动(检查服务是否启动) [root@web01 ~]# netstat -lntup |grep 9000 tcp 0 0 127.0.0.1:9000 0.0.0.0:* LISTEN 回到顶部 2.5 nginx 与 php 建立连接关系 2.5.1 修改nginx配置文件,使nginx程序与php程序建立联系 vim extra/blog.conf server { listen 80; server_name blog.etiantian.org; location / { root html/blog; index index.php index.html index.htm; } location ~* .*\.(php|php5)?$ { root html/blog; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; include fastcgi.conf; } } 说明:利用nginx的location区块实现动态请求与静态请求的分别处理 <-- 需要注意编辑修改默认首页文件 index index.php index.html index.htm; 让nginx服务具有动态请求解析功能。 2.5.2 重启服务 [root@web01 ~]# /application/nginx/sbin/nginx -t nginx: the configuration file /application/nginx-1.10.2/conf/nginx.conf syntax is ok nginx: configuration file /application/nginx-1.10.2/conf/nginx.conf test is successful [root@web01 ~]# /application/nginx/sbin/nginx -s reload 2.5.3 编辑nginx与php连通性测试文件,并进行测试 测试动态请求是否可以处理: echo '<?php phpinfo(); ?>' >/application/nginx/html/blog/test_info.php 测试站点 curl http://blog.etiantian.org/index.html <-- 静态请求站点文件信息测试 curl http://blog.etiantian.org/test_info.php <-- 动态请求站点文件信息测试 说明:当php服务停止时,9000端口信息消失,即停止PHP错误报502错误 linux系统测试完毕后,建议利用浏览器进行最终测试,测试效果更明显些 2.5.4 浏览器测试 浏览器访问 http://blog.znix.top/test_info.php 回到顶部 2.6 编辑php与mysql连通性测试文件,并进行测试 2.6.1 创建数据库 mysql -uroot -pclsn123; show databases; <--- 查看当前数据库信息 create database wordpress; <---创建博客储存数据库 2.6.2 在mysql中添加用户信息 创建数据库授权用户 grant all on wordpress.* to 'wordpress'@'10.0.0.%' identified by 'clsn123'; flush privileges; 授权 所有权限 为 wordpress库的所有表 用户@地址 设置密码 ; 刷新数据库 添加上用于blog使用的mysql用户 drop user wordpress@'172.16.1.8'; <--- 删除用户信息 select user,host from mysql.user; <--- 查看用户信息 mysql -uwordpress -p123456 <--- 测试创建的用户连接 show databases; <--- 查看当前数据库信息 回到顶部 2.7 测试php与数据库连通性 vim test_mysql.php <?php //$link_id=mysql_connect('主机名','用户','密码'); //mysql -u用户 -p密码 -h 主机 $link_id=mysql_connect('localhost','wordpress','clsn123') or mysql_error(); if($link_id){ echo "mysql successful by clsn !\n"; }else{ echo mysql_error(); } ?> 2.7.1 网站访问测试 测试动态请求访问nginx服务是否可以到达数据库 回到顶部 2.8 下载部署wordpress博客程序 下载地址:https://cn.wordpress.org 2.8.1 解压出来 tar xf wordpress-4.7.3-zh_CN.tar.gz 2.8.2 代码上线 [root@web01 wordpress]# pwd /server/tools/lnmp/wordpress [root@web01 wordpress]# mv ./* /application/nginx/html/blog/ 2.8.3 统一代码属主.属组 对站点目录进行 授权 [root@web01 wordpress]# cd /application/nginx/html/blog/ [root@web01 blog]# chown www.www -R /application/nginx/html/blog/ [root@web01 blog]# ll total 200 -rw-r--r-- 1 www www 11 Oct 25 09:20 index.html -rw-r--r-- 1 www www 418 Sep 25 2013 index.php …… 说明:wp-config.php文件创建需要能够有权限对目录操作。 此文件定义数据库连接信息 2.8.4 创建数据库 mysql -uroot -pclsn123; show databases; create database wordpress; 2.8.5 添加wordpress数据库用户 mysql> grant all on wordpress.* to 'wordpress'@'10.0.0.%' identified by 'clsn123'; Query OK, 0 rows affected (0.16 sec) mysql> select user,host from mysql.user; +-----------+-----------+ | user | host | +-----------+-----------+ | wordpress | 10.0.0.% | | root | 127.0.0.1 | | root | ::1 | | | localhost | | root | localhost | | | web01 | | root | web01 | +-----------+-----------+ 7 rows in set (0.00 sec) 2.8.6 安装wordpress 访问网站进行初始化操作 填写的数据为 连接数据库配置说明 数据库名:指定数据存储到哪一个数据库当中,例如:存储到wordpress数据库中 用户名:以什么用户身份管理wordpress数据库 密码: 用户的密码 数据库主机: 指定连接的数据库服务器地址信息 表前缀:标识相应表属于哪一个数据库 说明:配置完数据连接信息后,会自动创建wp-config.php文件,此文件定义数据库连接配置信息 安装完成效果 第3章 mysql数据/储存数据迁移 回到顶部 3.1 mysql数据库迁移 说明: 以上的mysql配置都是在web01 上进行 ,现在需要将web01上的mysql数据进行迁移到db01(数据库服务器)上去。 3.1.1 备份数据库中的数据 [root@db01 ~]# mysqldump -uroot -pclsn123 --all-databases >/tmp/bak.sql 使用mysqldump命令将数据库中的全部数据进行备份 备份到 /tmp/bak.sql 。 mysqldump命令参数说明: 参数 参数说明 --add-drop-table 在每个创建数据库表语句前添加删除数据库表的语句; --add-locks 备份数据库表时锁定数据库表; --all-databases 备份MySQL服务器上的所有数据库; --comments 添加注释信息; --compact 压缩模式,产生更少的输出; --complete-insert 输出完成的插入语句; --databases 指定要备份的数据库; --default-character-set 指定默认字符集; --force 当出现错误时仍然继续备份操作; --host 指定要备份数据库的服务器; --lock-tables 备份前,锁定所有数据库表; --no-create-db 禁止生成创建数据库语句; --no-create-info 禁止生成创建数据库库表语句; --password 连接MySQL服务器的密码; --port MySQL服务器的端口号; --user 连接MySQL服务器的用户名。 3.1.2 将备份数据传输到mysql服务器(db01) [root@web01 tools]# rsync -avz /tmp/bak.sql 172.16.1.51:/tmp/ The authenticity of host '172.16.1.51 (172.16.1.51)' can't be established. RSA key fingerprint is d3:41:bb:0d:43:88:da:a3:2c:e8:36:91:11:c9:e4:9c. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added '172.16.1.51' (RSA) to the list of known hosts. root@172.16.1.51's password: sending incremental file list bak.sql sent 377261 bytes received 31 bytes 83842.67 bytes/sec total size is 1483738 speedup is 3.93 使用rsync将数据推送到MySQL服务器的/tmp 目录下面。 3.1.3 数据库服务器部署mysql服务(快速部署命令集) mysql服务快速部署过程脚本。详情参见mysql数据库部署安装。 cd /server/tools tar xf mysql-5.6.34-linux-glibc2.5-x86_64.tar.gz useradd -s /sbin/nologin -M mysql mkdir -p /application/ mv /server/tools/mysql-5.6.34-linux-glibc2.5-x86_64 /application/mysql-5.6.34 ln -s /application/mysql-5.6.34/ /application/mysql chown -R mysql.mysql /application/mysql /application/mysql/scripts/mysql_install_db --basedir=/application/mysql --datadir=/application/mysql/data --user=mysql cp /application/mysql/support-files/mysql.server /etc/init.d/mysqld chmod +x /etc/init.d/mysqld sed -i 's#/usr/local/mysql#/application/mysql#g' /application/mysql/bin/mysqld_safe /etc/init.d/mysqld \cp /application/mysql/support-files/my-default.cnf /etc/my.cnf /etc/init.d/mysqld start /application/mysql/bin/mysqladmin -u root password 'clsn123' 3.1.4 将备份的数据恢复到数据库服务器上 [root@db01 ~]# /application/mysql/bin/mysql -uroot -pclsn123 </tmp/bak.sql Warning: Using a password on the command line interface can be insecure. 注意,数据库导入之后要刷新数据库,让导入的数据被识别(重要) mysql> flush privileges; Query OK, 0 rows affected (0.00 sec) 3.1.5 在web01服务器上进行远程登陆数据库测试 [root@web01 ~]# /application/mysql/bin/mysql -u wordpress -pclsn123 -h 10.0.0.51 Warning: Using a password on the command line interface can be insecure. Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 4 Server version: 5.6.34 MySQL Community Server (GPL) Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql> mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | test | | wordpress | +--------------------+ 3 rows in set (0.00 sec) 3.1.6 修改web服务器php连接数据库主机的配置文件 修改wordpress软件的配置,将连接的主机地址改为数据库服务器的地址 [root@web01 ~]# vim /application/nginx/html/blog/wp-config.php …… /** MySQL主机 */ define('DB_HOST', '10.0.0.51'); …… 回到顶部 3.2 本地数据挂载到nfs共享储存 3.2.1 确认本地数据的储存位置(三种方法) 01.通过网页图片属性信息进行确认路径 http://blog.clsn.top/wp-content/uploads/2017/10/cropped-Frog-2.png 02.通过find查看数据储存路径信息,上传个图片,查找相同中1分钟以内的文件 find -type f -mmin -1 03.通过inotify软件进行监控 确认文件的储存目录 /application/nginx/html/blog/wp-content/uploads 3.2.2 将已有数据进行迁移备份 备份数据是因为挂载的时候会将当前的数据全部'覆盖'掉,只显示nfs共享目录的信息。 [root@web01 uploads]# pwd /application/nginx/html/blog/wp-content/uploads [root@web01 uploads]# mkdir /tmp/wordpress_bak [root@web01 uploads]# mv ./* /tmp/wordpress_bak/ 3.2.3 nfs储存服务配置 配置nfs服务的时候注意权限的设置 [root@nfs01 data]# cat /etc/exports #share user:hzs /data 172.16.1.0/24(rw,sync,root_squash,no_all_squash,anonuid=501,anongid=501) 注意: anonuid 与 anongid 要和web服务器上的www用户的相同(UID与GID相同) [root@nfs01 /]# id www uid=501(www) gid=501(www) groups=501(www) 目录的属组要是与nfs配置的anonuid,anongid相同的用户。 [root@nfs01 /]# ll /data/ -d drwxr-xr-x 3 www www 4096 Oct 27 12:11 /data/ NFS的配置详情参见:NFS存储服务部署一篇。 3.2.4 将储存目录挂载到nfs共享目录上 注:作为nfs客户端需要安装nfs-utils 和 rpcbind ①先检查是否能挂载,显示可以挂载的目录 [root@web01 uploads]# showmount -e 172.16.1.31 Export list for 172.16.1.31: /data 172.16.1.0/24 ②将磁盘进行挂载 [root@web01 uploads]# mount -t nfs 172.16.1.31:/data /application/nginx/html/blog/wp-content/uploads/ ③显示磁盘信息 [root@web01 uploads]# df -h Filesystem Size Used Avail Use% Mounted on /dev/sda3 19G 3.7G 15G 21% / tmpfs 238M 0 238M 0% /dev/shm /dev/sda1 190M 40M 141M 22% /boot 172.16.1.31:/data 19G 1.5G 17G 9% /application/nginx-1.10.2/html/blog/wp-content/uploads 3.2.5 恢复数据(将之前备份的数据还原回来) [root@web01 uploads]# pwd application/nginx-1.10.2/html/blog/wp-content/uploads [root@web01 uploads]# mv /tmp/wordpress_bak/* ./

优秀的个人博客,低调大师

企业级LNMP架构搭建实例(基于Centos6.x)

1.1 部署LNMP架构说明 1.1.1 LNMP架构内容 01.部署linux系统 02.部署nginx网站服务 03.部署mysql数据库服务 04.部署php动态解析服务 1.1.2 配置LNMP架构步骤 01.配置Nginx配置文件 02.配置mysql数据库信息(SQL语句) 03.配置wordpress博客网站 1.1.3 架构服务器串联 01.数据库数据信息迁移(web服务器上的mysql数据 迁移到10.0.0.51 数据库服务器上) 02.将本地储存数据挂载到NFS共享储存服务器里(共享储存用户上传的数据信息) 1.1.4 LNMP FastCGI知识说明 工作原理讲解说明: ①. 用户请求的静态文件,由nginx服务自行处理,根据静态的location配置进行处理 用户请求的动态文件,由php服务进行处理,根据动态的location配置进行处理 ②. nginx服务接收到动态请求,会将请求抛送给fastcgi,类似于nginx服务接收动态请求的秘书,秘书会将动态请求送给PHP程序 ③. PHP如果可以处理,会将处理结果直接通过fastcgi返回给nginx程序;如果不可以处理,还会请求后端数据库,最终再把处理结果返回给nginx 第2章 LNMP环境搭建步骤 2.1 部署linux系统 基本优化(ip地址 yum更新 字符集) 安全优化完成(iptables关闭 selinux关闭 tmp目录权限777) 说明:详细配置参见 https://www.cnblogs.com/znix/p/7736899.html 2.2 部署nginx网站服务 2.2.1 检查软件安装的系统环境 [root@web01 ~]# cat /etc/redhat-release CentOS release 6.9 (Final) [root@web01 ~]# uname -r 2.6.32-696.el6.x86_64 2.2.2 安装nginx的依赖包(pcre-devel openssl-devel) yum install -y pcre-devel openssl-devel pcre:兼容perl语言正则表达式,perl compatible regular expressions rewirte模块 参数信息(perl方式定义正则表达式) openssl:ssh---openssh/openssl---https 总结:所有安装依赖软件,后面都要加上-devel 2.2.3 下载nginx软件 wget http://nginx.org/download/nginx-1.10.2.tar.gz 说明:软件很小,用心查看一下 解压软件 tar xf nginx-1.10.2.tar.gz 2.2.4 创建管理用户 www useradd -M -s /sbin/nologin www 2.2.5 nginx软件编译安装过程 2.2.5.1 注意 软件编译安装步骤 a>软件解压配置(将软件程序安装到哪个目录中 开启nginx软件的哪些功能) b>软件编译过程 c>软件编译安装过程 注意顺序,顺序不对软件安装会出错 2.2.5.2 编译安装软件 1、配置软件,在软件的解压目录中 [root@web01 nginx-1.10.2]# ./configure --prefix=/application/nginx-1.10.2 --user=www --group=www --with-http_stub_status_module --with-http_ssl_module 编译参数说明: --prefix 表示指定软件安装到哪个目录中,指定目录不存在会自动创建 --user/--group nginx工作进程由哪个用户运行管理 --with-http_stub_status_module 启动nginx状态模块功能(用户访问nginx的网络信息) --with-http_ssl_module 启动https功能模块 通过软件编译过程中的返回值是否正确,确认配置是否正确 [root@web01 nginx-1.10.2]# echo $? 0 2、编译软件 [root@web01 nginx-1.10.2]# make 3、编译安装 [root@web01 nginx-1.10.2]# make install 2.2.6 创建软连接 [root@web01 application]# ln -s /application/nginx-1.10.2/ /application/nginx 2.2.7 精简化nginx.conf 主配置文件内容, 编写nginx配置文件 [root@web01 conf]# egrep -v "#|^$" nginx.conf.default >nginx.conf 2.2.8 启动程序 [root@web01 application]# /application/nginx/sbin/nginx [root@web01 application]# 检查是否启动 [root@web01 application]# ps -ef |grep nginx root 26548 1 0 20:13 ? 00:00:00 nginx: master process /application/nginx/sbin/nginx www 26549 26548 0 20:13 ? 00:00:00 nginx: worker process root 26551 23431 3 20:13 pts/0 00:00:00 grep --color=auto nginx 检查端口信息 [root@web01 application]# netstat -lntup |grep 80 tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 26548/nginx 服务部署完成, 修改hosts解析文件,进行浏览器访问测试 至此软件安装完毕! 2.3 部署mysql数据库服务 2.3.1 下载mysql软件 这里使用的是5.6.34版本;在下载mysql的时候一定要注意与系统匹配的版本。 mysql-5.6.34-linux-glibc2.5-x86_64.tar.gz 方法一:mysql官网下载地址 https://dev.mysql.com/downloads/mirrors/ 尽量使用ftp下载,http的下载方式较为繁琐。下载的时候选择与自己近的服务进行下载即可。 方法二: 使用搜狐的镜像站也可以进行下载,注意使用的软件版本。 http://mirrors.sohu.com/mysql/ 2.3.2 【二进制包方式】安装mysql数据库软件 2.3.2.1 解压二进制包软件 cd /server/tools/ [root@web01 tools]# tar xf mysql-5.6.34-linux-glibc2.5-x86_64.tar.gz 2.3.2.2 创建储存目录管理用户mysql [root@web01 tools]# useradd -s /sbin/nologin -M mysql 2.3.2.3 将解压后的二进制包放置到程序目录中 将mysql解压后的程序包搬家到程序目录下,并创建软连接。 cd /server/tools/ mv mysql-5.6.34-linux-glibc2.5-x86_64 /application/mysql-5.6.34 ln -s /application/mysql-5.6.34 /application/mysql 2.3.2.4 对mysql数据储存目录进行授权 让mysql用户管理 /application/mysql/data [root@web01 ~]# chown -R mysql.mysql /application/mysql/data/ [root@web01 ~]# ll /application/mysql/data/ -d drwxr-xr-x 3 mysql mysql 4096 Oct 26 11:26 /application/mysql/data/ 2.3.2.5 初始化数据库服务 /application/mysql/scripts/mysql_install_db --basedir=/application/mysql --datadir=/application/mysql/data --user=mysql ①始化参数说明: --basedir 数据库软件命令,软件安装在哪里 --datadir 数据存放目录,数据存放在哪里 --user 管理mysql的用户,MySQL使用的用户谁 ②【*】判定初始化命令执行成功的方法 1)确认返回值,看是否为0 [root@web01 ~]# echo $? 2)确认输出的内容中有两个ok 3)通过数据库初始化操作,在data目录中创建出默认的数据库信息和相关表信息 [root@web01 ~]# ls -l /application/mysql/data/ total 110604 -rw-rw---- 1 mysql mysql 12582912 Oct 26 11:56 ibdata1 -rw-rw---- 1 mysql mysql 50331648 Oct 26 11:56 ib_logfile0 -rw-rw---- 1 mysql mysql 50331648 Oct 26 11:56 ib_logfile1 drwx------ 2 mysql mysql 4096 Oct 26 11:56 mysql drwx------ 2 mysql mysql 4096 Oct 26 11:56 performance_schema drwxr-xr-x 2 mysql mysql 4096 Oct 26 11:26 test ③初始化输出的内容信息 To start mysqld at boot time you have to copy support-files/mysql.server to the right place for your system 启动mysql服务,可以复制support-files/mysql.server到系统的启动目录中 mysql.server程序自带的启动脚本文件 PLEASE REMEMBER TO SET A PASSWORD FOR THE MySQL root USER ! To do so, start the server, then issue the following commands: /application/mysql/bin/mysqladmin -u root password 'new-password' /application/mysql/bin/mysqladmin -u root -h web01 password 'new-password' 说明: 表示对mysql服务管理源root用户设置密码 You can start the MySQL daemon with: cd . ; /application/mysql/bin/mysqld_safe & 可以以后台方式运行 mysqld_safe 脚本命令,也可以运行mysql服务 2.3.2.6 将启动脚本文件复制到启动目录中 [root@web01 ~]# cp -a /application/mysql/support-files/mysql.server /etc/init.d/mysqld 修改启动服务脚本相关文件内容--更改软件的存放目录 注意: 修改的是两个位置 sed -i 's#/usr/local/mysql#/application/mysql#g' /application/mysql/bin/mysqld_safe /etc/init.d/mysqld 添加到开机自启动,让chkconfig 管理,能够开机自启动 [root@web01 ~]# chkconfig --add mysqld [root@web01 ~]# chkconfig mysqld on 2.3.2.7 设置mysql服务配置文件 mysql默认配置文件保存位置 /etc/my.cnf 从软件中复制出来配置文件,使用软件中自带的配置文件即可 \cp /application/mysql/support-files/my-default.cnf /etc/my.cnf 2.3.2.8 启动mysql服务 [root@web01 ~]# /etc/init.d/mysqld start Starting MySQL...... SUCCESS! 2.3.2.9 检查端口信息,确认服务是否启动 [root@web01 ~]# netstat -lntup |grep 3306 tcp 0 0 :::3306 :::* LISTEN 54042/mysqld 2.3.2.10 设置root用户密码信息 [root@web01 ~]# /application/mysql/bin/mysqladmin -u root password 'clsn123' Warning: Using a password on the command line interface can be insecure. 2.3.2.11 测试 [root@web01 ~]# /application/mysql/bin/mysql -uroot -pclsn123 Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 14 Server version: 5.6.34 MySQL Community Server (GPL) Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql> 登录数据库命令简化方法 echo 'export PATH=/application/mysql/bin:$PATH' >>/etc/profile source /etc/profile which mysql 2.3.3 管理mysql数据库 2.3.3.1 查看数据库 mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | | test | +--------------------+ 4 rows in set (0.26 sec) 2.3.3.2 查看数据表信息 mysql> use mysql;show tables; Reading table information for completion of table and column names You can turn off this feature to get a quicker startup with -A Database changed +---------------------------+ | Tables_in_mysql | +---------------------------+ | columns_priv | | db | | event | | func | | general_log | | help_category | | help_keyword | | help_relation | | help_topic | | innodb_index_stats | | innodb_table_stats | | ndb_binlog_index | | plugin | | proc | | procs_priv | | proxies_priv | | servers | | slave_master_info | | slave_relay_log_info | | slave_worker_info | | slow_log | | tables_priv | | time_zone | | time_zone_leap_second | | time_zone_name | | time_zone_transition | | time_zone_transition_type | | user | +---------------------------+ 28 rows in set (0.00 sec) 2.3.3.3 退出数据库 quit | exit 退出数据库时,尽量不要用ctrl+c进行退出mysql 用ctrl+d进行退出 数据库基础操作(数据库框架) show databases; <--- 查询默认的数据库信息 create database clsn; <---创建新的数据库 drop database clsn; <---删除存在的数据库 use mysql; <--- 表示选择使用一个数据库,相当于cd进入一个数据库 show tables; <---查看数据库中表信息 select database(); <--- 表示查看当前所在数据库,类似于pwd命令的功能 select user(); <--- 查看当前登录数据库的用户,类似于whoami命令 并且mysql还可以限制指定用户可以从哪里进行连接登录数据库 select * from user\G; <---查看user表中所有信息,并且纵行显示 select user,host from user; ---查看user表中指定信息,并且横行显示 select user,host from mysql.user; ---查看可以登录mysql数据库的目录,以及都可以从哪里进行管理mysql数据库 grant all on *.* to user@'host' identified by 'clsn123'; ---创建用户 grant all on *.* to Old_Boy@'localhost' identified by 'clsn123'; ---创建用户(大写用户) drop user 'user'@'host'; flush privileges; --- 刷新权限 2.4 部署php服务 2.4.1 解决PHP软件的依赖关系(14个依赖包) 2.4.1.1 基于base源的个依赖包 yum install zlib-devel libxml2-devel libjpeg-devel libjpeg-turbo-devel libiconv-devel freetype-devel libpng-devel gd-devel libcurl-devel libxslt-devel libxslt-devel -y 检查的方法一:rpm rpm -qa zlib-devel libxml2-devel libjpeg-devel libjpeg-turbo-devel libiconv-devel freetype-devel libpng-devel gd-devel libcurl-devel libxslt-devel 检查的方法二:再安装一遍即可确认是否都安装上 yum install -y zlib-devel libxml2-devel libjpeg-devel libjpeg-turbo-devel libiconv-devel freetype-devel libpng-devel gd-devel libcurl-devel libxslt-devel 2.4.1.2 libiconv软件 和字符集转换相关软件 由于该软件yum安装不上,需要单独安装一下。 mkdir -p /server/tools cd /server/tools #wget http://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.14.tar.gz tar zxf libiconv-1.14.tar.gz cd libiconv-1.14 ./configure --prefix=/usr/local/libiconv make make install 说明:此软件在centos6.8之后已经自带此软件功能,可以不进行安装 编译好的软件如何删除 删除安装后的程序目录即可 fpm 定制rpm包 rpm包制作软件---把编译后的程序目录进行打包,通过fpm相关参数指定rpm解压之前要先安装哪些依赖 2.4.1.3 安装加密相关的依赖软件(3个) 这三个软件依赖与epel源 yum -y install libmcrypt-devel mhash mcrypt rpm -qa libmcrypt-devel mhash mcrypt 2.4.2 编译安装php过程 解压安装包 cd /server/tools/ [root@web01 lnmp]# tar xf php-5.5.32.tar.gz 配置php (配置的参数较多) mysqlnd本地没有mysql ./configure \ --prefix=/application/php-5.5.32 \ --with-mysql=mysqlnd \ --with-pdo-mysql=mysqlnd \ --with-iconv-dir=/usr/local/libiconv \ --with-freetype-dir \ --with-jpeg-dir \ --with-png-dir \ --with-zlib \ --with-libxml-dir=/usr \ --enable-xml \ --disable-rpath \ --enable-bcmath \ --enable-shmop \ --enable-sysvsem \ --enable-inline-optimization \ --with-curl \ --enable-mbregex \ --enable-fpm \ --enable-mbstring \ --with-mcrypt \ --with-gd \ --enable-gd-native-ttf \ --with-openssl \ --with-mhash \ --enable-pcntl \ --enable-sockets \ --with-xmlrpc \ --enable-soap \ --enable-short-tags \ --enable-static \ --with-xsl \ --with-fpm-user=www \ --with-fpm-group=www \ --enable-ftp \ --enable-opcache=no PHP编译参数详解 1 ./configure 编译参数 2 3 –prefix=/application/php5.3.27 指定php的安装路径为/application/php5.3.27 4 5 –with-mysql=/application/mysql/ 6 需要指定mysql的安装路径,安装PHP需要的MySQL相关内容。当然如果没有MySQL软件包,也可以不单独安装,这样的情况可使用–with-mysql=mysqlnd替代–with-mysql=/application/mysql,因为PHP软件里面已经自带连接MySQL的客户端工具。 7 8 –with-iconv-dir=/usr/local/libiconv libiconv库,各种字符集间的转换 9 10 –with-freetype-dir 打开对freetype字体库支持 11 12 –with-jpeg-dir 打开对jpeg图片的支持 13 14 –with-png-dir 打开对png图片的支持 15 16 –with-zlib 打开zlib库的支持,用于http压缩传输 17 18 –with-libxml-dir=/usr 打开libxml2库的支持 19 20 –enable-xml 21 22 –disable-rpath 关闭额外的运行库文件 23 24 –enable-safe-mode 打开安全模式 25 26 –enable-bcmath 打开图片大小调整,用zabbix监控时会用到该模块 27 28 –enable-shmop 29 30 –enable-sysvsem 使用sysv信号机制,则打开此选项 31 32 –enable-inline-optimization 优化线程 33 34 –with-curl 打开curl浏览工具的支持 35 36 –with-curlwrappers 运维curl工具打开url流 37 38 –enable-mbregex 39 40 –enable-mbstring 支持mbstring 41 42 –with-mcrypt 编码函数库 43 44 –with-gd 打开gd库的支持 45 46 –enable-gd-native-ttf 支持TrueType字符串函数库 47 48 –with-openl openl的支持,加密传输时用到 49 50 –with-mhash mhash算法的扩展 51 52 –enable-pcntl freeTDS需要用到,可能是链接mql 53 54 –enable-sockets 打开sockets支持 55 56 –with-xmlrpc 打开xml-rpc的c语言 57 58 –enable-zip 打开对zip的支持 59 60 –enable-soap soap模块的扩展 61 62 –enable-short-tags 开始和标记函数 63 64 –enable-zend-multibyte 支持zend的多字节 65 66 –enable-static 生成静态链接库 67 68 –with-xsl 打开XSLT文件支持,扩展libXML2库,需要libxslt软件 69 70 –enable-ftp 打开ftp的支持 71 72 –enable-fpm 表示激活PHP-FPM方式服务,即FactCGI方式运行PHP服务。 73 74 –with-fpm-user=www 指定PHP-FPM进程管理的用户为www,此处最好和Nginx服务用户统一。 75 76 –with-fpm-group=www 指定PHP-FPM进程管理用户组为www,此处最好和Nginx服务用户组统一。 View Code PHP编译参数详解 输出的信息 Generating files configure: creating ./config.status creating main/internal_functions.c creating main/internal_functions_cli.c +--------------------------------------------------------------------+ | License: | | This software is subject to the PHP License, available in this | | distribution in the file LICENSE. By continuing this installation | | process, you are bound by the terms of this license agreement. | | If you do not agree with the terms of this license, you must abort | | the installation process at this point. | +--------------------------------------------------------------------+ Thank you for using PHP. 防错 ln -s /application/mysql/lib/libmysqlclient.so.18 /usr/lib64/ touch ext/phar/phar.phar 编译 && 编译安装 make && make install 2.4.3 PHP软件程序创建软链接 ln -s /application/php-5.5.32/ /application/php 2.4.4 配置php解析文件/配置php-fpm配置文件 两个默认的配置文件区别 cd /server/tools/php-5.5.32 ll php.ini* -rw-r--r--. 1 1001 1001 69236 2016-02-02 21:33 php.ini-development -rw-r--r--. 1 1001 1001 69266 2016-02-02 21:33 php.ini-production 配置文件说明: php.ini-developments是开发人员调试用配置文件 php.ini-production是生产常见所有配置文件 文件区别对比: 生产的文件不会输出过多的日志信息,而开发文件会输出大量程序测试日志信息。 对比俩个文件不同的命令 diff / vimdiff 复制配置文件(2个) # 创建软连接 : ln -sf /application/php-5.5.32 /application/php [root@web01 ~]#cd /server/tools/php-5.5.32 [root@web01 php-5.5.32]# cp php.ini-production /application/php/lib/php.ini [root@web01 etc]# cd /application/php/etc/ [root@web01 etc]# cp php-fpm.conf.default php-fpm.conf 2.4.5 启动php-fpm程序 [root@web01 ~]# /application/php/sbin/php-fpm 确认php 9000端口是否正确启动(检查服务是否启动) [root@web01 ~]# netstat -lntup |grep 9000 tcp 0 0 127.0.0.1:9000 0.0.0.0:* LISTEN 2.5 nginx 与 php 建立连接关系 2.5.1 修改nginx配置文件,使nginx程序与php程序建立联系 vim extra/blog.conf server { listen 80; server_name blog.etiantian.org; location / { root html/blog; index index.php index.html index.htm; } location ~* .*\.(php|php5)?$ { root html/blog; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; include fastcgi.conf; } } 说明:利用nginx的location区块实现动态请求与静态请求的分别处理 <-- 需要注意编辑修改默认首页文件 index index.php index.html index.htm; 让nginx服务具有动态请求解析功能。 2.5.2 重启服务 [root@web01 ~]# /application/nginx/sbin/nginx -t nginx: the configuration file /application/nginx-1.10.2/conf/nginx.conf syntax is ok nginx: configuration file /application/nginx-1.10.2/conf/nginx.conf test is successful [root@web01 ~]# /application/nginx/sbin/nginx -s reload 2.5.3 编辑nginx与php连通性测试文件,并进行测试 测试动态请求是否可以处理: echo '<?php phpinfo(); ?>' >/application/nginx/html/blog/test_info.php 测试站点 curl http://blog.etiantian.org/index.html <-- 静态请求站点文件信息测试 curl http://blog.etiantian.org/test_info.php <-- 动态请求站点文件信息测试 说明:当php服务停止时,9000端口信息消失,即停止PHP错误报502错误 linux系统测试完毕后,建议利用浏览器进行最终测试,测试效果更明显些 2.5.4 浏览器测试 浏览器访问 http://blog.znix.top/test_info.php 2.6 编辑php与mysql连通性测试文件,并进行测试 2.6.1 创建数据库 mysql -uroot -pclsn123; show databases; <--- 查看当前数据库信息 create database wordpress; <---创建博客储存数据库 2.6.2 在mysql中添加用户信息 创建数据库授权用户 grant all on wordpress.* to 'wordpress'@'10.0.0.%' identified by 'clsn123'; flush privileges; 授权 所有权限 为 wordpress库的所有表 用户@地址 设置密码 ; 刷新数据库 添加上用于blog使用的mysql用户 drop user wordpress@'172.16.1.8'; <--- 删除用户信息 select user,host from mysql.user; <--- 查看用户信息 mysql -uwordpress -p123456 <--- 测试创建的用户连接 show databases; <--- 查看当前数据库信息 2.7 测试php与数据库连通性 vim test_mysql.php <?php //$link_id=mysql_connect('主机名','用户','密码'); //mysql -u用户 -p密码 -h 主机 $link_id=mysql_connect('localhost','wordpress','clsn123') or mysql_error(); if($link_id){ echo "mysql successful by clsn !\n"; }else{ echo mysql_error(); } ?> 2.7.1 网站访问测试 测试动态请求访问nginx服务是否可以到达数据库 2.8 下载部署wordpress博客程序 下载地址:https://cn.wordpress.org 2.8.1 解压出来 tar xf wordpress-4.7.3-zh_CN.tar.gz 2.8.2 代码上线 [root@web01 wordpress]# pwd /server/tools/lnmp/wordpress [root@web01 wordpress]# mv ./* /application/nginx/html/blog/ 2.8.3 统一代码属主.属组 对站点目录进行 授权 [root@web01 wordpress]# cd /application/nginx/html/blog/ [root@web01 blog]# chown www.www -R /application/nginx/html/blog/ [root@web01 blog]# ll total 200 -rw-r--r-- 1 www www 11 Oct 25 09:20 index.html -rw-r--r-- 1 www www 418 Sep 25 2013 index.php …… 说明:wp-config.php文件创建需要能够有权限对目录操作。 此文件定义数据库连接信息 2.8.4 创建数据库 mysql -uroot -pclsn123; show databases; create database wordpress; 2.8.5 添加wordpress数据库用户 mysql> grant all on wordpress.* to 'wordpress'@'10.0.0.%' identified by 'clsn123'; Query OK, 0 rows affected (0.16 sec) mysql> select user,host from mysql.user; +-----------+-----------+ | user | host | +-----------+-----------+ | wordpress | 10.0.0.% | | root | 127.0.0.1 | | root | ::1 | | | localhost | | root | localhost | | | web01 | | root | web01 | +-----------+-----------+ 7 rows in set (0.00 sec) 2.8.6 安装wordpress 访问网站进行初始化操作 填写的数据为 连接数据库配置说明 数据库名:指定数据存储到哪一个数据库当中,例如:存储到wordpress数据库中 用户名:以什么用户身份管理wordpress数据库 密码: 用户的密码 数据库主机: 指定连接的数据库服务器地址信息 表前缀:标识相应表属于哪一个数据库 说明:配置完数据连接信息后,会自动创建wp-config.php文件,此文件定义数据库连接配置信息 安装完成效果 第3章 mysql数据/储存数据迁移 3.1 mysql数据库迁移 说明: 以上的mysql配置都是在web01 上进行 ,现在需要将web01上的mysql数据进行迁移到db01(数据库服务器)上去。 3.1.1 备份数据库中的数据 [root@db01 ~]# mysqldump -uroot -pclsn123 --all-databases >/tmp/bak.sql 使用mysqldump命令将数据库中的全部数据进行备份 备份到 /tmp/bak.sql 。 mysqldump 命令参数说明: 参数 参数说明 --add-drop-table 在每个创建数据库表语句前添加删除数据库表的语句; --add-locks 备份数据库表时锁定数据库表; --all-databases 备份MySQL服务器上的所有数据库; --comments 添加注释信息; --compact 压缩模式,产生更少的输出; --complete-insert 输出完成的插入语句; --databases 指定要备份的数据库; --default-character-set 指定默认字符集; --force 当出现错误时仍然继续备份操作; --host 指定要备份数据库的服务器; --lock-tables 备份前,锁定所有数据库表; --no-create-db 禁止生成创建数据库语句; --no-create-info 禁止生成创建数据库库表语句; --password 连接MySQL服务器的密码; --port MySQL服务器的端口号; --user 连接MySQL服务器的用户名。 3.1.2 将备份数据传输到mysql服务器(db01) [root@web01 tools]# rsync -avz /tmp/bak.sql 172.16.1.51:/tmp/ The authenticity of host '172.16.1.51 (172.16.1.51)' can't be established. RSA key fingerprint is d3:41:bb:0d:43:88:da:a3:2c:e8:36:91:11:c9:e4:9c. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added '172.16.1.51' (RSA) to the list of known hosts. root@172.16.1.51's password: sending incremental file list bak.sql sent 377261 bytes received 31 bytes 83842.67 bytes/sec total size is 1483738 speedup is 3.93 使用rsync将数据推送到MySQL服务器的/tmp 目录下面。 3.1.3 数据库服务器部署mysql服务(快速部署命令集) mysql服务快速部署过程脚本。详情参见mysql数据库部署安装。 cd /server/tools tar xf mysql-5.6.34-linux-glibc2.5-x86_64.tar.gz useradd -s /sbin/nologin -M mysql mkdir -p /application/ mv /server/tools/mysql-5.6.34-linux-glibc2.5-x86_64 /application/mysql-5.6.34 ln -s /application/mysql-5.6.34/ /application/mysql chown -R mysql.mysql /application/mysql /application/mysql/scripts/mysql_install_db --basedir=/application/mysql --datadir=/application/mysql/data --user=mysql cp /application/mysql/support-files/mysql.server /etc/init.d/mysqld chmod +x /etc/init.d/mysqld sed -i 's#/usr/local/mysql#/application/mysql#g' /application/mysql/bin/mysqld_safe /etc/init.d/mysqld \cp /application/mysql/support-files/my-default.cnf /etc/my.cnf /etc/init.d/mysqld start /application/mysql/bin/mysqladmin -u root password 'clsn123' 3.1.4 将备份的数据恢复到数据库服务器上 [root@db01 ~]# /application/mysql/bin/mysql -uroot -pclsn123 </tmp/bak.sql Warning: Using a password on the command line interface can be insecure. 注意,数据库导入之后要刷新数据库,让导入的数据被识别(重要) mysql> flush privileges; Query OK, 0 rows affected (0.00 sec) 3.1.5 在web01服务器上进行远程登陆数据库测试 [root@web01 ~]# /application/mysql/bin/mysql -u wordpress -pclsn123 -h 10.0.0.51 Warning: Using a password on the command line interface can be insecure. Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 4 Server version: 5.6.34 MySQL Community Server (GPL) Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql> mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | test | | wordpress | +--------------------+ 3 rows in set (0.00 sec) 3.1.6 修改web服务器php连接数据库主机的配置文件 修改wordpress软件的配置,将连接的主机地址改为数据库服务器的地址 [root@web01 ~]# vim /application/nginx/html/blog/wp-config.php …… /** MySQL主机 */ define('DB_HOST', '10.0.0.51'); …… 3.2 本地数据挂载到nfs共享储存 3.2.1 确认本地数据的储存位置(三种方法) 01.通过网页图片属性信息进行确认路径 http://blog.clsn.top/wp-content/uploads/2017/10/cropped-Frog-2.png 02.通过find查看数据储存路径信息,上传个图片,查找相同中1分钟以内的文件 find -type f -mmin -1 03.通过inotify软件进行监控 确认文件的储存目录 /application/nginx/html/blog/wp-content/uploads 3.2.2 将已有数据进行迁移备份 备份数据是因为挂载的时候会将当前的数据全部'覆盖'掉,只显示nfs共享目录的信息。 [root@web01 uploads]# pwd /application/nginx/html/blog/wp-content/uploads [root@web01 uploads]# mkdir /tmp/wordpress_bak [root@web01 uploads]# mv ./* /tmp/wordpress_bak/ 3.2.3 nfs储存服务配置 配置nfs服务的时候注意权限的设置 [root@nfs01 data]# cat /etc/exports #share user:hzs /data 172.16.1.0/24(rw,sync,root_squash,no_all_squash,anonuid=501,anongid=501) 注意: anonuid 与 anongid 要和web服务器上的www用户的相同(UID与GID相同) [root@nfs01 /]# id www uid=501(www) gid=501(www) groups=501(www) 目录的属组要是与nfs配置的anonuid,anongid相同的用户。 [root@nfs01 /]# ll /data/ -d drwxr-xr-x 3 www www 4096 Oct 27 12:11 /data/ NFS的配置详情参见: NFS存储服务部署一篇。 3.2.4 将储存目录挂载到nfs共享目录上 注:作为nfs客户端需要安装nfs-utils 和 rpcbind ①先检查是否能挂载,显示可以挂载的目录 [root@web01 uploads]# showmount -e 172.16.1.31 Export list for 172.16.1.31: /data 172.16.1.0/24 ②将磁盘进行挂载 [root@web01 uploads]# mount -t nfs 172.16.1.31:/data /application/nginx/html/blog/wp-content/uploads/ ③显示磁盘信息 [root@web01 uploads]# df -h Filesystem Size Used Avail Use% Mounted on /dev/sda3 19G 3.7G 15G 21% / tmpfs 238M 0 238M 0% /dev/shm /dev/sda1 190M 40M 141M 22% /boot 172.16.1.31:/data 19G 1.5G 17G 9% /application/nginx-1.10.2/html/blog/wp-content/uploads 3.2.5 恢复数据(将之前备份的数据还原回来) [root@web01 uploads]# pwd application/nginx-1.10.2/html/blog/wp-content/uploads [root@web01 uploads]# mv /tmp/wordpress_bak/* ./ 3.2.6 命令补全功能 yum install bash-completion -y

优秀的个人博客,低调大师

消息中间件的多个企业级场景案例--分析

1 用户注册后(会立即提示注册成功),过一会发送短信和邮件通知 发布/订阅模型 以上模式一般是用户注册成功后,写入一条数据到mysql,在发送一条消息到MQ! 如果不用消息中间件(或者简单的做成异步发送),做成了用户提交了注册之后,成功后,就同步立即执行发送邮件和短信服务脚本(这样耗时间),这样用户体验不好时间慢! 术语: SOA 2 把日志进行集中收集,用于日志分析和流量回放分析 术语:灰度发布,小流量 3 将数据源头复制到多个目的地,一般是要求顺序或者因果关系序的 用于跨机房数据传输,搜索 离线数据和其他DB等 术语: AOP 4 消息暂存地 把消息中间件当成可靠的消息暂存地 定时进行消息投递,比如模拟用户秒杀访问,进行系统性能压测 消费者消费完后不删除消息! 这种压测方式比较真实,比一般的并发压测软件更符合真实环境! 5 缓存数据同步更新 往应用推送数据 就像很多数据都是缓存在本地的应用中的如tomcat应用,如一个数据价格缓存,当有数据更新的时候,就需要及时(而不是通过租约到期去解决) 这个时候就需要中间件,不是一个一个去通知更新 本文转自残剑博客51CTO博客,原文链接http://blog.51cto.com/cuidehua/1769423如需转载请自行联系原作者 cuizhiliang

优秀的个人博客,低调大师

企业级Nginx服务基础到架构优化详解--25条

1、隐藏nginx header版本号 2、更改源码隐藏软件名称 3、更改nginx默认用户及用户组 4、配置nginx worker进程个数 5、根据CPU核数进行nginx进程优化 6、nginx事件处理模型优化 7、调整Nginx worker单个进程允许的客户端最大连接数 8、配置Nginx worker进程最大打开文件数 9、开启高效的文件传输模式 10、设置连接超时时间 11、上传文件大小设置(动态应用) 12、fastcgi调优(配合PHP引擎动态服务) 13、配置nginx gzip压缩功能 14、配置Nginx expires缓存功能 15、Nginx日志相关优化与安全 16、Nginx站点目录及文件URL访问控制(防止恶意解析) 17、防止恶意解析访问企业网站 18、Nginx图片及目录防盗链 19、Nginx错误页面的优雅显示 20、Nginx防爬虫优化 21 、限制HTTP请求方法 22、防DOS攻击 23、使用CDN为网站内容加速 24、Nginx程序架构优化 25、使用普通用户启动Nginx(监牢模式) 1、隐藏nginx header版本号 查看版本号 1 2 3 4 5 6 7 8 [root@db02~] #curl-Ihttp://www.lichengbing.cn HTTP/1.1200OK Server:nginx/1.6.3 Date:Tue,16Aug201614:39:48GMT Content-Type:text/html;charset=UTF-8 Connection:keep-alive X-Powered-By:PHP/5.5.32 Link:<http: //www.lichengbing.cn/wp-json/>;rel="https://api.w.org/" 编译nginx.conf配置文件,添加server_tokens off参数 1 2 3 4 5 6 7 8 http{ ... server_tokensoff; #控制httpresponseheader内的服务版本信息的显示,以及错误信息中web服务版本信息 ... } [root@db02~] #curl-Ihttp://www.lichengbing.cn HTTP/1.1200OK Server:nginx #版本隐藏 2、更改源码隐藏软件名称 修改3个nginx源码文件 第一个nginx-1.6.3/src/core/nginx.h文件 1 2 3 4 5 6 7 [root@lichengbingnginx-1.6.3] [root@lichengbingnginx-1.6.3] #cd~/tools/nginx-1.6.3 [root@lichengbingnginx-1.6.3] #sed-n'13,17p'src/core/nginx.h #defineNGINX_VERSION"1.6.3"#改成你想要的版本号,如2.2.5 #defineNGINX_VER"Nginx/"NGINX_VERSION#你想改成的软件名称,如Apache #defineNGINX_VAR"NGINX"#可以改成OWS等 #defineNGX_OLDPID_EXT".oldbin" 第二个ngx_http_header_filter_module.c 1 [root@lichengbingnginx-1.6.3] #sed-i's#Server:nginx#Server:OWS#g'src/http/ngx_http_header_filter_module.c 第三个ngx_http_special_response.c是否对外展示敏感信息 1 2 3 4 5 6 7 8 9 [root@lichengbingnginx-1.6.3] #sed-n'21,30p'src/http/ngx_http_special_response.c staticu_charngx_http_error_full_tail[]= "<hr><center>" NGINX_VER "</center>" CRLF "</body>" CRLF "</html>" CRLF ; staticu_charngx_http_error_tail[]= "<hr><center>nginx</center>" CRLF "</body>" CRLF 修改为如下 1 2 3 4 5 6 7 8 9 [root@lichengbingnginx-1.6.3] #sed-n'21,30p'src/http/ngx_http_special_response.c staticu_charngx_http_error_full_tail[]= "<hr><center>" NGINX_VER "(http://www.lichengbing.cn)</center>" CRLF "</body>" CRLF "</html>" CRLF ; staticu_charngx_http_error_tail[]= "<hr><center>OWS</center>" CRLF "</body>" CRLF 重新编译安装nginx,重启服务 3、更改nginx默认用户及用户组 1 2 3 4 5 6 7 8 9 10 [root@lichengbing~] #grep'#user'/application/nginx/conf/nginx.conf.default #usernobody;#系统默认的用户为nobody [root@lichengbing~] #useraddwww-s/sbin/nologin-M#建立用户www userwwwwww; #nginx.conf中配置用户 也可以在编译时加入用户和用户组,如 --user=www--group=www-- with -http_ssl_module-- with -http_stub_status_module--prefix=/application/nginx-1.6.3/ [root@lichengbing~] #ps-ef|grepnginx|grep-vgrep root138610Jul21?00:00:00nginx:masterprocess/application/nginx/sbin/nginx www247321386023:19?00:00:00nginx:workerprocess #此时workerprocess进程就是使用的www用户权限,当然也可以使master降权运行 4、配置nginx worker进程个数 1 2 3 4 5 6 7 worker_processes8; #最好为服务器CPU的逻辑核心数 [root@netmonitor~] #grep"physicalid"/proc/cpuinfo|sort|uniq|wc-l#物理核数 2 [root@netmonitor~] #grep"cpucores"/proc/cpuinfo|uniq#单核心数 cpucores:4 [root@netmonitor~] #grep"processor"/proc/cpuinfo|wc-l#逻辑核心数 8 5、根据cpu核数进行nginx进程优化 亲和力参数(Nginx服务可能会发生只在同一颗CPU上起作用的情况) 1 2 3 worker_processes8; worker_cpu_affinity001001001001000; #数字代表1、2、3、4的掩码,平均分摊进程压力 worker_cpu_affinity0000000100000010... #8核心写法 防止进程只在一个核心上运行也可以使用 taskset 命令 1 taskset-c1,2,3/application/nginx/sbin/nginxstart 6、nginx事件处理模型优化 nginx的连接处理机制在不同的操作系统中会采用不同的I/O模型:Linux上使用epoll、BSD上面用kqueue、Solaris中使用/dev/poll、windows中使用icop. 1 2 3 events{ useepoll; #nginx官方建议,可以不指定事件处理模型,Nginx会自动选择最佳的事件处理模型 } 7、调整Nginx worker单个进程允许的客户端最大连接数 1 2 3 4 5 6 7 worker_processes8; events{ worker_connections1024; } #最大连接数Max_client=worker_processes*worker_connections #进程的最大连接数受Linux系统进程的最大打开文件数限制,在执行操作系统命令“ulimit-HSn65535”后,才能生效 #连接数并不是越大越好,要在系统性能能接受的范围内 8、配置Nginx worker进程最大打开文件数 1 2 3 events{ worker_rlimit_nofile65535; #该值可设置为系统优化后的ulimit-HSn的结果 } 9、开启高效的文件传输模式 1 2 3 4 http{ sendfileon; #开启文件的高效传输模式 } #同时将tcp_nopush和tcp_nodelay两个指令设置为on,减少网络传输包数量、防止网络及磁盘的I/O阻塞,提升Nginx效率 10、设置连接超时时间 1 2 3 4 5 6 7 8 http{ keepalive_timeout65; #设置客户端连接保持会话的超时时间 tcp_nodelayon; #激活tcp_nodelay,提高I/O性能,在包含keepalive参数时才有效 client_header_timeout15; #读取客户端请求头数据超时时间,超时则返回“Requesttimeout(408)” clietn_body_timeout15; #读取客户端请求主体超时时间 send_timeout15; #指定客户端响应时间 } #将无用的连接尽快设置为超时,可以保护服务器的系统资源(CPU、内存、磁盘) 11、上传文件大小设置(动态应用) 1 2 3 http{ client_max_body_size10m; #具体数字要根据业务需求决定 } 12、fastcgi调优(配合PHP引擎动态服务) fastcgi作为静态服务和动态服务之间的传接口,也有cache和buffer缓存和缓冲区 1 2 3 4 5 6 7 8 9 10 http{ fastcgi_connect_timeout240; #连接到后端fastcgi的超时时间 fastcgi_send_timeout240; #已经和fastcgi建立连接后多久不传送数据,就会被断开 fastcgi_read_timeout240; #接收fastcgi应答的超时时间 fastcgi_buffer_size64k; #指定读取fastcgi应答第一部分需要多大的缓冲区,可以设置为gastcgi_buffers选项指定的缓冲区大小 fastcgi_busy_buffers_size128k; #繁忙时的buffer,可以是fastcgi_buffer的两倍 fastcgi_temp_path/data/ngx_fcgi_tmp;在写入fastcgi_temp_path时将用多大的数据库,默认是fastcgi_buffer的两倍,如果太小,可能会报502BadGateWay fastcgi_cache_path/data/ngx_fcgi_cachelevels=2:2keys_zone=ngx_fcgi_cache:512minactive=1dmax_s ize=40g; #指定相关参数配比 } 在server标签中配合设置相关参数 1 2 3 4 5 6 7 8 9 10 11 12 13 14 server{ location~.*\.(php|php5)?${ roothtml/www; fastcgi_pass127.0.0.1:9000; fastcgi_indexindex.php; includefastcgi.conf; fastcgi_cachengx_fcgi_cache; #表示开启缓存并为其指定一个名称,开启缓存非常有用,可以有效降低cpu的负载,并且防止502的发生,但是也可能会带来其他问题 fastcgi_cache_valid2003021h; #将对应的应答码缓存时间 fastcgi_cache_valid3011d; #将301缓存1天 fastcgi_cache_validany1m; #将其他应答缓存1分钟 fastcgi_cache_min_uses1; #请求数量 fastcgi_cache_use_staleerrortimeoutinvalid_headerhttp_500; #错误判断 } } 13、配置nginx gzip压缩功能 ###(重要!!!)几k字节的压缩比在大数据量的冲击下也可以节省不少的流量,网站内容传输速度更快,为用户带来更好的浏览体验 Nginx gzip压缩模块提供了压缩文件内容的功能,用户请求的内容在发送到用户客户端之前,Nginx服务器会根据一些具体的策略实施压缩,到客户端后由浏览器解压 Nginx 依赖ngx_http_gzip_module模块 Apache 使用mod_deflate压缩功能 1 2 3 4 5 6 7 8 9 http{ gzipon; #开启压缩功能 gzip_min_length1k; #允许压缩的最小页面字节数,从header头的Content-Length中获取,不管页面多大都进行压缩,建议设置成大于1K,如果小于1K可能会越压缩越大 gzip_http_version1.1; #压缩版本,默认为1.1,目前大部分浏览器都支持压缩 gzip_buffers432k; #压缩缓冲大小,允许申请4个单位为32K的内存作为流缓存 gzip_comp_level9; #压缩比例,1最小,9最大,传输速度最快,但是比较消耗资源 gzip_typestext/csstext/xmlapplication/javascript; #指定压缩的内容类型 gzip_varyon; #varyheader支持,让前端的缓存服务器继续缓存传输该压缩页面,而不提前解压 } 14、配置Nginx expires缓存功能 (重要!!!) 在网站的开发和运营过程中,视频、图片、CSS、JS等网站元素的更改机会较少,我们可以将这些更改频率较少的内容缓存在用户本地,用户在第二次访问网站时就不用继续去服务器下载了,节省流量,加快访问速度 1 2 3 4 5 6 7 8 9 10 server{ location~.*\.(gif|jpg|jpeg|png|bmp|swf)$ #指定缓存文件的类型 { expires3650d; #指定缓存时间 } location~.*\.(js|css)?$ { expires3d; } } expires缓存的缺点就是在网站更新相关数据后,用户如果不清理缓存看到的就会一直是过期的数据,为了解决这个问题,可以1、缩短缓存时间,比如百度的首页图片缓存时间为一天;2、服务后台更改图片名称,这样就相当于是一个新的页面内容,用户会重新下载 3、相关的CSS、JS推送到CDN 15、Nginx日志相关优化与安全 1)每天进行日志切割,备份 1 2 3 4 5 #!/bin/sh cd/application/nginx/logs/ mvwww_access.logwww.access_$(date+%F-d-1day).log mvblog_access.logblog.access_$(date+%F-d-1day).log /application/nginx/sbin/nginx-sreload 1 2 3 cat>>/ var /spool/cron/root<<EOF 0000***/bin/sh/server/scripts/cut_nginx_log.sh>/dev/ null 2>&1 EOF 2)不记录不需要的访问日志 对于健康检查或者某些图片、JS、CSS日志,一般不需要记录日志,因为在统计PV时是按照页面计算的,而且写入频繁会消耗IO,降低服务器性能 1 2 3 location~.*\.(js|jpg|JPG|jpeg|JPEG|css|bmp|gif|GIF)${ access_logoff; } 3)访问日志的权限设置 1 2 chown-Rroot.root/application/nginx/logs chmod-R700/application/logs 16、Nginx站点目录及文件URL访问控制(防止恶意解析) 1)根据扩展名限制程序或者文件被访问 资源文件夹如用户上传的头像,防止恶意上传脚本病毒文件被解析执行 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 server{ location~^/images/.*\.(php|php5|sh|pl|py)${ #指定目录限制访问 denyall; } location~^/static/.*\.(php|php5|sh|pl|py)${ denyall; } location~^/data/.*\.(php|php5|sh|pl|py)${ denyall; } location~.*\.(php|php5)?${ #必须配置在解析之前 roothtml/www; fastcgi_pass127.0.0.1:9000; fastcgi_indexindex.php; includefastcgi.conf; } } 2)禁止访问目录并返回指定HTTP代码 1 2 3 server{ location/admin/{ return 404;} } 3)限制网站来源IP 1 2 3 4 5 6 7 server{ location~^/admin/{ allow202.111.12.211; #allow192.168.1.0/24;#也可以限制IP段 denyall; } } 企业问题案列:Nginx做方向代理的时候可以限制客户端IP吗? 方法一:用if来控制 1 2 3 4 5 6 if ($remotea_addr=10.0.0.110){ return 403; } if ($remotea_addr=10.0.0.111){ set$allow_access_root 'true' ; } 方法二:利用deny和allow 1 2 3 4 5 6 location/{ roothtml/blog; indexindex.phpindex.htmlindex.html; deny10.0.0.7; allowall; } 17、防止恶意解析访问企业网站 方法一 1 2 3 4 5 server{ listen80default_server; server_name_; return 501; } 方法二 1 2 3 4 5 server{ listen80default_server; server_name_; rewrite^(.*)http: //www.lichengbing.cn$1permanent; } 方法三 1 2 3 4 server{ if ($host!~^www/.lichengbing/.com$){ rewrite^(.*)http: //www.lichengbing.cn$1permanent; } 18、Nginx图片及目录防盗链 网站图片被盗链最直接的影响就是网络带宽占用加大了,宽带费用变高了,网络流量忽高忽低,Zabbix频繁告警 由于购买了CDN加速,流量高了好几个G,瞬间损失好几万... 利用referer防盗链 1 2 3 4 5 6 7 location~.*\.(jpg|gif|png|swf|flv|wma|wmv|asf|mp3|mmf|zip|rar)${ valid_referersnoneblocked*.lichengbing.cnlichengbing.cn; if ($invalid_referer){ rewrite^/http: //www.lichengbing.cn/img/nolink.jpg } } #或者也可以使用NginxHttpAccessKeyModule实现防盗链 19、Nginx错误页面的优雅显示 1 2 3 server{ error_page403/403.html; #当出现403错误时,会跳转到403.html页面 } 20、Nginx防爬虫优化 robots.txt机器人协议 网络爬虫排除标准,告诉搜索引擎哪些目录可以抓取,哪些禁止抓取 禁止下载协议代理 1 2 3 if ($http_user_agent~*LWP::Simple|BBBike|wget){ return 403; } 防止N多爬虫代理访问网站 1 2 3 4 if ($http_user_agent~* “qihoobot|Baiduspider|Googlebot|Googlebot-Mobile|Googlebot-Image|Mediapartners-Google|Adsbot-Google|Yahoo!SlurpChina|YoudaoBot|Sosospider|Sogouspider|Sogouwebspider|MSNBot”){ return 403; } 禁止不同浏览器访问 1 2 3 4 if ($http_user_agent~*“Firefox|MSIE”) { rewrite^(.*)http: //blog.etiantian.org/$1permanent } 21 、限制HTTP请求方法 1 2 3 if ($request_method!~^(GET|HEAD|POST)$){ return 501; } 只允许GET等,允许DELETE、SEARCH等 为防止黑客通过上传服务器执行木马,也可以在上传服务器上做限制HTTP的GET 1 2 3 if ($request_method~*^(GET)$){ return 501; } 22、防DOS攻击 使用limit_conn_zone进行控制,控制单个IP或域名的访问次数,限制连续访问 1 2 3 4 5 6 7 limit_conn_zone$binary_remote_addrzone=perip:10m; limit_conn_zone$server_remote_addrzone=perserver:10m; server{ limit_connperip10; limit_connperserver100; } #还可以使用limit_req_zone进行控制,控制单个IP的访问速率 23、使用CDN为网站内容加速 全国或全球的内容分布式缓存集群,其实质通过智能DNS判断用户的来源地域及上网线路,为用户选择一个最接近用户地域,以及和用户上网线路相同的服务器节点,提升用户浏览网站的体验 要加速的业务数据应该存在独立的域名,然后删除A记录解析,使用CNAME解析 24、Nginx程序架构优化 解耦,一堆程序代码按照业务用途分开,然后提供服务,例如:注册登录、上传、下载、浏览列表、商品内容、订单支付等都应该是独立的程序服务,只不过在客户端看来是一个整体而已,小公司最起码要做到的解耦是 01网页页面服务 02图片附件及下载服务 03上传图片服务 25、使用普通用户启动Nginx(监牢模式) 降权思想,Nginx的Master进程使用的是root用户,worker进程使用的是nginx指定的普通用户,用root跑nginx的Master进程有两大问题:1是最小化权限分配遇到问题;2、网站一旦有漏洞,很容易丢掉root权限 降权执行的好处: 1、创建普通用户inca,用inca跑Nginx服务,开发运维都使用普通帐号,只要和inca同组,照样可以管理nginx,还解决了root权限太大问题 2、职责分明,相关账号负责维护程序和日志,出问题负首要责 本文转自MQ_douer 51CTO博客,原文链接:http://blog.51cto.com/douer/1928330,如需转载请自行联系原作者

优秀的个人博客,低调大师

《企业级ios应用开发实战》一2.1 苹果iOS 简介

2.1 苹果iOS 简介 苹果iPhone手机自发布之日以来就给人们带来了全新的感觉和操作体验。一是因为iPhone更为优秀的硬件性能,二是因为苹果手机跨时代的操作系统——苹果iOS。iOS即iPhone OS,是苹果公司针对其iPhone、iPod Touch和iPad产品开发的基于UNIX架构的苹果专属操作系统。原本这个系统名为iPhone OS,直到2010年6月7日WWDC大会上宣布改名为iOS。iOS分为iPhone、iPod Touch和iPad三个版本,但三个版本往往同步更新。iOS的发展历史:2007年6月29日,苹果发布了iPhone OS 1.0固件。2008年7月11日苹果发布了iOS 2.0。iOS 3.0固件在2009年6月17日发布。2010年6月21日,苹果发布第四代iPhone操作系统——iOS 4.0,在这个版本中,苹果加入了人们期待已久的多任务处理功能。目前最新的iOS版本为2012年7月发布的iOS 6版本,这只是Beta 3版,正式版预计稍后推出。虽然iOS是一个相对封闭、苹果专属的操作系统,其他品牌厂商的产品无法使用,但其优秀的运行性能和杰出的操作体验,仍然是许多操作系统无法比拟的。作者在同时使用了一段时间的iPhone和Android手机后发现,无论是系统性能还是稳定性上而言,iOS 4.0的表现都要远远优于Android 2.x系统。其次,从应用程序的丰富程度上看,iOS应用也远远超过了Android应用。很显然,App Store能让应用开发商盈利这一点,是iOS开发平台比Android更胜一筹的主要原因。可以预料到的是,在未来相当长一段时间内,三大智能手机操作系统中以iOS处于领先地位的事实不会改变。iOS在iPad上获得的成功也从侧面印证了这一点。搭载iOS系统的苹果iPad获得了巨大的成功,其良好的用户体验和完善丰富的应用软件是成功的重要因素,这一成功与iOS系统在iPhone智能手机上的积累和完善密不可分。在应用到iPad产品之前,iOS经过三年多的改进,在iPhone上已经相当成熟,同时其积累的应用程序和开发经验也可以顺利转移到平板电脑上。另一方面,iPhone形成的良好口碑和用户经验也可以顺利转移到iPad平板电脑系统上。RichRelevance于2011年12月25日的调查数据显示,iOS设备在移动商务市场上的份额由4月份的88%上升到12月份的逾92%,Chitika Insights发布的数据显示,至2012年2月份,iOS设备的网络流量市场份额甚至超过了苹果自己的Mac OS。

优秀的个人博客,低调大师

《企业级ios应用开发实战》一2.2 iOS框架介绍

2.2 iOS框架介绍 iOS衍生自Mac OS X的成熟内核,但iOS操作系统更紧凑和高效,支持iPhone和iPod Touch的硬件。iOS继承了Mac OS X的风格,包括:统一的OS X 内核,针对网络的BSD套接字,以及Objective-C和C/C++编译器。iOS框架分为Cocoa Touch、Media、Core Service、Core OS四个层次,如图2-1所示。 这4个层次从上到下排列,位置越高说明层次越抽象,距离硬件底层越远,其特点如下:层次最高的是Cocoa Touch框架,是我们使用得最多的框架,每个iOS应用都要使用,其中包括:UIKit和Foundation(NS),下一节会更详细地介绍这一层。Media框架是对iPhone音频和视频协议的封装,例如,OpenGL ES、EAGL、Quartz、Core Animation、Core Audio、Open Audio Library和Media Player。Core Services框架提供了一些核心框架,诸如Address Book和Core Foundation,后者包含了基本的数据类型定义,如数组和集合。Core OS框架包含系统内核级服务,如线程、文件、I/O、内存和网络。

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

用户登录
用户注册