本文共 10470 字,大约阅读时间需要 34 分钟。
一、web服务之LNMP环境
1.1 LNMP工作原理
Nginx作为一款轻量级的web服务器,在LNMP架构的环境中是通过php-fpm这个服务来处理php文件的。而交于LNMP环境的另一种web架构—LAMP则是apache通过libphp5.so模块处理php文件。LNMP访问流程示意图Nginx和php-fpm是各自独立运行,所以在运行过程中,Nginx和php-fpm都需要分别启动
修改Nginx配置文件,启动Nginx服务,修改php配置文件需要启动php-fpm服务。Apache的libphp5.so随着apache服务器一起启动。1.3 LNMP环境搭建
环境介绍:角色 主机名 IP地址 系统 版本号 日期LNMP Node1.cn 10.10.125.1/24 RHEL6.5x86_64Nginx官网:
所需软件包:MySQL= mysql主程序包PHP= php主程序包Nginx= Nginx主程序包libmcrypt= libmcrypt加密算法扩展库,支持3DES等加密相关下载链接:Nginx:wget MySQL:wget Php:wget Script:wget ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.41.tar.gzLibmcrypt:wget --no-check-certificate源码编译安装LNMP编译安装nginx:在编译安装之前需要安装系统所以来的一些开发工具类文件例如:gcc,gcc-c++等解决依赖:Nginx安装yum install gcc gcc-c++ autoconf automake -y[root@node1 src]# yum -y install gcc gcc-c++ autoconf automake zlib zlib-devel openssl openssl-devel[root@node1 nginx-1.13.7]# ./configure --prefix=/usr/local/nginx --with-http_dav_module --with-http_stub_status_module --with-http_addition_module --with-http_sub_module --with-http_flv_module --with-http_mp4_module --with-pcre=/usr/local/pcre-8.42/ --sbin-path=/usr/sbin/[root@node1 nginx-1.13.7]# make[root@node1 nginx-1.13.7]# make install修改配置文件使支持php[root@node1 named]# vim /usr/local/nginx/conf/nginx.conflocation ~ .php$ { root 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;}MySQL安装:yum install -y cmake ncurses-devel[root@node1 src]# tar zxf mysql-5.7.20-linux-glibc2.12-x86_64.tar.gz[root@node1 src]# cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DMYSQL_UNIX_ADDR=/tmp/mysql.sock -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DWITH_EXTRA_CHARSETS=all -DWITH_MYISAM_STORAGE_ENGINE=1 -DWITH_INNOBASE_STORAGE_ENGINE=1 -DWITH_MEMORY_STORAGE_ENGINE=1 -DWITH_READLINE=1 -DENABLED_LOCAL_INFILE=1 -DMYSQL_DATADIR=/usr/local/mysql/data -DMYSQL_USER=mysql
make && make installchown -R mysql:mysql /usr/local/mysql/usr/local/mysql/scripts/mysql_install_db --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/datamv /etc/my.cnf /etc/my.cnf.bakcp /usr/local/mysql/support-files/my-default.cnf /etc/my.cnfsed -i '/^[mysqld]/adatadir = /usr/local/mysql/data' /etc/my.cnfsed -i '/^[mysqld]/abasedir = /usr/local/mysql' /etc/my.cnfcp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqldchmod +x /etc/init.d/mysqldecho "PATH=/usr/local/mysql/bin:$PATH" >> /etc/profileservice mysqld restartsource /etc/profileecho "source /etc/profile" >> /etc/rc.local启动mysql服务service mysqld restartPHP安装:
在Nginx中,我们使用的是php-fpm来对php页面解析,PHP-FPM其实是PHP源代码的一个补丁,指在将FastCGI进程管理整合进PHP包中。必须将它patch到你的PHP源代码中,再编译安装PHP后才可以使用从PHP5.3.3开始,PHP中直接整合了PHP-FPM,所以从PHP5.3.3版本以后,不需要下载PHP-FPM补丁包了,下面是PHP-FPM官方发出来的通知:PHP添加libmcrypt拓展
libmcrypt加密算法扩展库,支持DES, 3DES, RIJNDAEL, Twofish, IDEA, GOST, CAST-256, ARCFOUR, SERPENT, SAFER+等算法官方网站: 或者 在页面上点击下图连接,可以下载最新的2.5.8版本(页面上有个Browse All Files→→Libmcrypt)[root@Node1 ~]# tar xvf libmcrypt-2.5.8.tar.bz2 -C /usr/local/src/ ; cd /usr/local/src/libmcrypt-2.5.8/
[root@Node1 libmcrypt-2.5.8]# ./configure --prefix=/usr/local/libmcrypt ; make ; make install ; cd需要添加到库文件路径,由于系统默认规定只在/lib、/lib64、/lib/lib64下面找库文件,所以我们需要手动添加进去。[root@Node1 ~]# vim /etc/ld.so.confinclude ld.so.conf.d/.conf #此行原有/usr/local/libmcrypt/lib #此行添加解决依赖:[root@Node1 ~]# yum install php-pear [root@Node1 ~]# vim /etc/ld.so.confinclude ld.so.conf.d/.conf #此行原有/usr/local/libmcrypt/lib #此行在libmcrypt已添加/usr/local/mysql/lib #此行添加[root@Node1 ~]# ldconfig[root@Node1 ~]# echo 'ldconfig' >> /etc/rc.local除开上面的依赖解决之外,还需要安装图片,xml,字体支持基本库,使用yum去安装,安装的时候,这些软件包自身也有依赖![root@Node1 ~]# yum install -y libxml2-devel libcurl-devel libjpeg-devel libpng-devel freetype freetype-devel编译安装php[root@Node1 ~]# tar xvf php-5.6.13.tar.bz2 -C /usr/local/src/ ; cd /usr/local/src/php-5.6.13[root@Node1 php-5.6.13]# ./configure --prefix=/usr/local/php --with-config-file-path=/usr/local/php --with-mysql=/usr/local/mysql --with-mysqli=/usr/local/mysql/bin/mysql_config --with-iconv-dir --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-gd --enable-gd-native-ttf --with-openssl --with-mhash --enable-pcntl --enable-sockets --with-xmlrpc --enable-zip --enable-soap --with-mcrypt=/usr/local/libmcrypt --with-gettext[root@Node1 php-5.6.13]# make -j 4 ; make install ; cd
配置php和php-fpmPHP配置文件:[root@Node1 ~]# cp /usr/local/src/php-5.6.13/php.ini-production /usr/local/php/php.iniPHP-FPM配置文件:[root@Node1 ~]# cp /usr/local/php/etc/php-fpm.conf.default /usr/local/php/etc/php-fpm.conf[root@Node1 ~]# cp /usr/local/php/etc/php-fpm.d/www.conf.default /usr/local/php/etc/php-fpm.d/www.confPHP-FPM启动脚本[root@Node1 ~]# cp /usr/local/src/php-5.6.13/sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm[root@Node1 ~]# chmod +x /etc/init.d/php-fpm[root@Node1 ~]# chkconfig php-fpm on[root@Node1 ~]# /etc/init.d/php-fpm start检测PHP-FPM启动成功与否[root@Node1 ~]# netstat -antup | grep php-fpmtcp 0 0 127.0.0.1:9000 0.0.0.0:* LISTEN 122801/php-fpm 为PHP拓展外挂模块Phpize,./configure make make install 最后添加到php配置文件,重启php-fpm测试LNMP的PHP支持
echo "<?php phpinfo(); ?>" > /usr/local/nginx/html/index.php
浏览器访问<主机IP>1.4 升级LNMP
如果之前已经安装过老版本的nginx,需要将nginx升级到最新版,首先要做的就是检查老版本nginx的编译相关的configure的信息,查看方法如下:[root@node1 src]# /usr/local/nginx/sbin/nginx -Vnginx version: nginx/1.8.0configure arguments: --prefix=/usr/local/nginx --with-http_dav_module --with-http_stub_status_module --with-http_addition_module --with-http_sub_module --with-http_flv_module --with-http_mp4_module --with-pcre=/usr/local/src/pcre-8.37下载新版本[root@node1 nginx-1.13.7]# wget [root@node1 nginx-1.13.7]# cp -ap /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx.bak编译安装:[root@node1 nginx-1.13.7]# ./configure --prefix=/usr/local/nginx --with-http_dav_module --with-http_stub_status_module --with-http_addition_module --with-http_sub_module --with-http_flv_module --with-http_mp4_module --with-pcre=/usr/local/src/pcre-8.37[root@node1 nginx-1.13.7]# make[root@node1 nginx-1.13.7]# make install验证:[root@node1 nginx-1.13.7]# /usr/local/nginx/sbin/nginx -t[root@node1 nginx-1.13.7]# /usr/local/nginx/sbin/nginx -Vnginx version: nginx/1.13.7升级完成:二、nginx配置文件详解2.1 nginx配置文件之全局配置2.2 nginx配置文件之局部配置
2.3 nginx配置文件之创建多个虚拟主机
虚拟主机,也叫“网站空间”,就是把一台运行在互联网上的物理服务器划分成多个“虚拟”服务器。虚拟主机技术极大的促进了网络技术的应用和普及。同时虚拟主机的租用服务也成了网络时代的一种新型经济形式。Nginx虚拟主机的配置,是通过nginx.conf中的server节点进行定义的,想要设置多个虚拟主机nginx提供了基于IP地址,基于端口号和基于域名的三种设置方式。只需要在http{ …… } 区域里进行server节点进行配置即可,以下将介绍如何通过这三中方式进行虚拟主机的设置。虚拟主机配置语法格式:server { listen <IPaddr:>80; #监听<IP地址:>端口号server_name example.org www.example.org; #虚拟主机名[IP地址]root html; #虚拟主机更目录location / { index index.html index.htm #默认访问页面}error_page 500 501 502 503 50x.html;}通用配置:listen 80;监听的时80端口root html;定义虚拟主机根目录index index.html index.htm; 默认访问文件为index.htmlerror_page 500 501 502 503 50x.html; 错误代码返回内容配置案例:
2.3.1 基于不同IP地址的虚拟主机IP地址 主机目录 测试文件内容(index.html)10.10.125.1 /usr/local/nginx/html/test1 xiaoxiong10.10.125.2 /usr/local/nginx/html/test2 10.10.125.3 /usr/local/nginx/html/test3 10.10.125.3http {
……server { listen 10.10.125.1:80;root /usr/local/nginx/html/test/;location / { index index.html index.htm index.php;}error_page 500 501 502 503 50x.html;}……}写入测试文件并进行验证[root@node1 test]# curl -l Xiaoxiong[root@node1 test]# curl -l Xiaoxiong1032.3.2 基于不同端口的虚拟主机配置案例:IP:端口号 主机目录 测试文件内容(index.html)10.10.125.1:80 /usr/local/nginx/html/test1 xiaoxiong10.10.125.1:8000 /usr/local/nginx/html/test2 10.10.125.1:8080 /usr/local/nginx/html/test3 10.10.125.3:8080配置内容:server { listen 8080;root /usr/local/nginx/html/test3/;location / { index index.html index.htm index.php;}error_page 500 501 502 503 50x.html;}验证:[root@node1 html]# curl -l 10.10.125.1:80802.3.3 基于域名创建虚拟主机nginx的虚拟主机命名有4种格式:1) 精确的名字,例如oa.lego.cc2) 号开头的,例如.lego.cc3) 号结尾的,例如 oa.lego.4) 正则表达式形式,例如:server_name ~^www\d+.oa.cc$注意:在使用正则表达式的时候必须以“~”波浪号开头server_name可以指定多个。而这些命名方式的优先级顺序如下:1>2>3>4应用实例:虚拟主机名 主机目录 测试文件内容(index.html)oa.lego.cc /usr/local/nginx/html/oa xiaoxiongvip.lego.cc /usr/local/nginx/html/roomis index.htmlZabbix.lego.cc /usr/local/nginx/html/zabbix index.php配置内容:server { listen 80;root /usr/local/nginx/html/roomis/;server_name roomis.lego.cc;location / { index index.html;}error_page 500 501 502 503 50x.html;location = /50x.html { root html;}}验证:
[root@node1 html]# curl -l roomis.lego.ccroomis.lego.cc能正常获取页面内容,配置正常三、nginx的访问控制
nginx的访问控制权限可以选择基于用户名的访问控制和基于IP的限制,依次来控制相关用于主机对web服务的访问,以及HTTP基本认证还可以与其他访问限制方法结合使用相关工具:指令:/usr/bin/htpasswdhttpd-tools-2.2.15-29.el6_4.x86_643.1 基于用户的访问创建基于用户名-密码访问的权限,需要创建密码文件,密码文件创建应用串号层序htpasswd。如果系统没有该指令可以使用yum -y install httpd-tools进行安装第一次创建用户需要使用-c选项,创建管理员admin1[root@node1 ~]# htpasswd -c /usr/local/nginx/users/.htpasswd admin1New password: 123456Re-type new password:123456根据提示输入两次密码。然后以相同方式创建其他用户admin2,……[root@node1 ~]# htpasswd /usr/local/nginx/users/.htpasswd admin2查看用户-密码对文件,此文件包含登录用户和密码:[root@node1 ~]# cat /usr/local/nginx/users/.htpasswd admin1:i/VCCYr.lD6rIadmin2:/6OBWKy4jt.M2配置nginx进行http基本认证指定要保护的位置(http,server及location均可以),指定auth_basic指令并为密码配置实例:基于端口8080的访问需要使用用户名和密码进行访问,基于zabbix.lego.cc不需要使用用户名和密码进行访问配置如下:server { listen 8080;root /usr/local/nginx/html/test1/;index index.html index.htm index.php;error_page 500 501 502 503 50x.html;}auth_basic "Administrator's Area"; #定义所属区域auth_basic_user_file /usr/local/nginx/users/.htpasswd; #定义访问用户密码对文件}
Zabbix.lego.cc相关配置server { ……auth_basic off; #对外网站则在相关server{}模块下阴雨auth_basic off的指令参数。……}3.2 基于IP的访问控制
HTTP基本认证可以有效地与IP地址的访问限制权限,nginx通过引入allow和deny指令用来定义web服务允许和拒绝访问等权限的相关设置。允许或拒绝来自与特定IP地址的访问allow和deny对指令的nignx access模块:location /status { ...deny 192.168.1.2;allow 192.168.1.1/24;allow 127.0.0.1;deny all;}访问将只被授予192.168.1.1/24不包括192.168.1.2地址的网络。请注意,allow并deny指示将在它们被定义的顺序来应用。3.3 基于IP和用户密码对进行组合权限设置通过IP和HTTP身份验证将限制与satisfy指令结合在一起。如果将该指令设置为all,则如果客户端满足这两个条件,则授予访问权限。如果将该指令设置为any,则如果客户端满足至少一个条件,则授予访问权限:location /status { ...satisfy all;deny 192.168.1.2;allow 192.168.1.1/24;allow 127.0.0.1;deny all;auth_basic "Administrator’s Area";auth_basic_user_file conf/htpasswd;
}
参考链接:
附录:
附录1:相关文档参考链接PHP-nginx:Nginx:MySQL:附录2:nginx参数说明
附录3:php编译参数说明
附录4:LNMP环境日常维护命令
转载于:https://blog.51cto.com/maoxiaoxiong/2346111