LNMP架构 【3】

一、Nginx负载均衡

Nginx负载均衡需要用到upstream模块,upstream模块用于定义多个web server,通过算法将访问请求分发到不同的web server。

以www.baidu.com为例,使用命令dig来查看解析的IP地址(yum install -y bind-utils):


然后在/usr/local/nginx/conf/vhost/目录下创建一个文件baidu.com.conf,写入如下的内容:
upstream baidu_com          只是代表服务器组的名称,可以随意定义,用于proxy_pass调用

{

    ip_hash;          ip_hash算法,将同一个源IP的访问请求发给同一个server,避免数据婚礼

    server 115.239.210.27:80;               定义后端的server

    server 115.239.211.112:80;               定义后端的server

}  

server     

    listen 80;                                         监听的端口

    server_name www.baidu.com;          虚拟主机域名

    location /

    {

        proxy_pass      http://baidu_com;             调用upstream qq_com

        proxy_set_header Host   $host;

        proxy_set_header X-Real-IP      $remote_addr;

        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

    }

}

配置完检查语法,并重新加载配置文件
测试访问效果,使用命令 curl -x127.0.0.1:80 www.baidu.com  得到www.baidu.com网站的源代码

 

 

二、ssl原理

ssl工作流程
浏览器发送一个https的请求给服务器;
 服务器要有一套数字证书,可以自己制作(后面的操作就是阿铭自己制作的证书),也可以向组织申请,区别就是自己颁发的证书需要客户端验证通过,才可以继续访问,而使用受信任的公司申请的证书则不会弹出>提示页面,这套证书其实就是一对公钥和私钥;
 服务器会把公钥传输给客户端;
 客户端(浏览器)收到公钥后,会验证其是否合法有效,无效会有警告提醒,有效则会生成一串随机数,并用收到的公钥加密;
 客户端把加密后的随机字符串传输给服务器;
 服务器收到加密随机字符串后,先用私钥解密(公钥加密,私钥解密),获取到这一串随机数后,再用这串随机字符串加密传输的数据(该加密为对称加密,所谓对称加密,就是将数据和私钥也就是这个随机字符串>通过某种算法混合在一起,这样除非知道私钥,否则无法获取数据内容);
 服务器把加密后的数据传输给客户端;
 客户端收到数据后,再用自己的私钥也就是那个随机字符串解密;

三、生成ssl密钥对

在实际生产环境中,ssl证书需要像相关的颁发机构购买。这样的证书会自动通过游览器的信任。而我们自己生产的SSL证书没有通过游览器信任,游览器会弹出相应的提示。

移动目录:cd /usr/local/nginx/conf/
创建私钥,其中tmp.key为私钥文件(该文件有密码):openssl genrsa -des3 -out tmp.key 2048
genrsa表示生成rsa类型的私钥文件,-des3表示使用des3加密算法
-out 指定生成的私钥文件名,2048表示加密算法的长度为2048位
生成私钥文件必须输入两次密码,
但是有密码的私钥比较麻烦,下面就来取消私钥文件的密码。
转换私钥,取消密码(方便客户端访问),并删除tmp.key:openssl rsa -in tmp.key -out zhaoyujie.key
生成证书请求文件,需要拿这个文件和私钥一起生产公钥文件: openssl req -new -key zhaoyujie.key -out zhaoyujie.csr


生成公钥文件,这里的zhaoyujie.crt为公钥:openssl x509 -req -days 365 -in zhaoyujie.csr -signkey zhaoyujie.key -out zhaoyujie.crt
x509 代表生成的x509的证书
-req 证书请求,用于生成证书文件
-days 证书的有效期,365表示一年
-in 指定证书请求文件
-signkey 指定私钥文件
-out 指定生成的公钥文件名

 

四、Nginx配置ssl

在/usr/local/nginx/conf/vhost/目录下创建一个文件zhaoyujie.com.conf,写入下面的配置内容:
server

{

    listen 443;

    server_name zhaoyujie.com;

    index index.html index.php;

    root /data/wwwroot/zhaoyujie.com;

    ssl on;

    ssl_certificate zhaoyujie.crt;            指定公钥

    ssl_certificate_key zhaoyujie.key;   指定私钥

    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;

}


如果出现错误:nginx: [emerg] unknown directive “ssl”需要重新编译安装nginx 加上--with-http_ssl_module
使用命令/usr/local/nginx/sbin/nginx -V 可以查看编译时使用的参数
命令cd /usr/local/src/nginx-1.14.0
命令 ./configure --prefix=/usr/local/nginx --with-http_ssl_module && make && make install
检查配置文件是否正确,重新加载nginx。或者重启nginx
查看443端口是否监听:


curl访问本地的https需要添加hosts:echo ’127.0.0.1 zhaoyuujie.com' >> /etc/hosts
直接使用命令,提示证书不被信任:curl https://zhaoyujie.com


使用选项-k,忽略证书检查访问:curl https://zhaoyujie.com -k


使用游览器访问,需要修改hosts,同样提示不信任:

 

 

五、php-fpm的pool

在php-fpm中可以定义多个pool(池子),不同的pool需要监听不同sock文件。

可以将多个pool定义到php-fpm的主配置文件中,pool的名称和监听的sock文件不能一样。
将php-fpm中的pool删除,并添加一行配置,可以指定一个pool的配置文件存放目录(拆分存放,更加简洁):inculde = /etc/php-fpm.d/*.conf


移至 /etc/php-fpm.d/目录,创建www.conf文件,写入如下内容:
[www]                  pool名称可以随意定义

listen = /tmp/php-fcgi.sock  指定这个pool监听的socket文件或者ip:port

listen.mode=666         监听sock文件时,sock文件的权限

user = php-fpm          进程用户

group = php-fpm         进程用户组

pm = dynamic           

pm.max_children = 50  

pm.start_servers = 3  

pm.min_spare_servers = 3 

pm.max_spare_servers = 35

pm.max_requests = 500    

rlimit_files = 1024   

再将www.conf文件复制一份命名为test.conf
[test]

listen = /tmp/test.sock

listen.mode=666

user = php-fpm

group = php-fpm

pm = static

pm.max_children = 5

pm.start_servers = 5

pm.min_spare_servers = 1

pm.max_spare_servers = 35

pm.max_requests = 500

rlimit_files = 1024

检查php-fpm配置语法错误。重载配置文件:php-fpm -t && php -fpm reload
查看php-fpm的进程:

 

 

六、php-fpm慢执行日志

当有时候访问php网页慢的时候可以开启慢执行日志来查看是否是PHP代码执行时间过长,还可以看到具体是哪个PHP文件的哪一行导致的慢执行。

编辑该文件vim /usr/local/nginx/conf/vhost/www..conf 加入以下内容:
request_slowlog_timeout = 1                                              记录超过1秒的php日志到下面定义的地址

slowlog = /usr/local/php-fpm/var/log/www-slow.log

检查语法错误,重新加载nginx
在/data/wwwroot/test.com/目录下创建一个测试的php文件,写入如下内容:
<?php

echo "test slow log";

sleep(2);

echo "done";

?>

命令curl测试,停顿2秒
检测日志:cat /usr/local/php-fpm/var/log/www-slow.log  显示造成该停顿的原因是php文件的第三行。

  • 一般将记录超过时间设置为2秒

 

七、nginx配置open_basedir

设定open_basedir可以使PHP只能访问指定目录下的文件,可以在虚拟主机配置中配置open_basedir,也可以在php的pool池中配置open_basedir。

修改vim /usr/local/php-fpm/etc/php-fpm.d/www.conf 
php_admin_value[open_basedir]=/data/wwwroot/aming.com:/tmp/

为了测试,先定义一个错误的路径
修改/usr/local/php-fpm/etc/php.ini
游览器不显示错误信息:display_errors = Off
定义错误日志路径:error_lop = /usr/local/php-fpm/var/log/php_errors.log
定义日志级别为所以: errot_reporting = E_ALL
 手动创建日志文件:touch /usr/local/php-fpm/var/log/php_errors.log
 修改日志文件权限:chmod 777 /usr/local/php-fpm/var/log/php_errors.log
检查php-fpm配置文件是否正确并重新加载:php-fpm -t && /etc/init.d/php-fpm reload
测试,出现错误,代码404:


再修改/etc/php-fpm.d/www.conf 配置文件将open_basedir修改为正确的路径
重载php-fpm服务配置在再次访问测试:

 

 

八、php-fpm进程管理

[www]                  pool名称可以随意定义
listen = /tmp/php-fcgi.sock  指定这个pool监听的socket文件或者ip:port
listen.mode=666         监听sock文件时,sock文件的权限
user = php-fpm          进程用户
group = php-fpm         进程用户组
pm = dynamic             dynamic动态进程管理可以根据需求自动生成新的子进程,也可以是static一下子启动pm.max_children定义的进程数。
pm.max_children = 50              dynamic、 static时均生效。最大子进程数,ps aux可以查看。
pm.start_servers = 3                 static时不生效,启动服务时会启动的进程数
pm.min_spare_servers = 3        static时不生效,定义在空闲时段,子进程数的最少数量,如果达到这个数值时,php-fpm服务会自动派生新的子进程。
pm.max_spare_servers = 35     static时不生效,定义在空闲时段,子进程数的最大值,如果高于这个数值就开始清理空闲的子进程。
pm.max_requests = 500            static时不生效,定义一个子进程最多处理的请求数,也就是说在一个php-fpm的子进程最多可以处理这么多请求,当达到这个数值时,它会自动退出。
rlimit_files = 1024                       static时不生效

 

扩展

ssl相关

https://coding.net/u/aminglinux/p/nginx/git/blob/master/ssl/ca.md

https://coding.net/u/aminglinux/p/nginx/git/blob/master/ssl/ssl.md

负载均衡

https://coding.net/u/aminglinux/p/nginx/git/blob/master/proxy/lb.md

nginx算法分析https://blog.whsir.com/post-1482.html

root和alias

http://www.ttlsa.com/nginx/nginx-root_alias-file-path-configuration/

原文地址:https://blog.csdn.net/weixin_42604768/article/details/90373105

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


本篇内容介绍了“LNMP服务器环境配置实例分析”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情...
本篇内容主要讲解“OneinStack如何一键安装LNMP”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“OneinStack如何...
小编给大家分享一下如何解决LNMP安装composer install时出现Warning: putenv()问题,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅...
1.源码安装mysql鉴于前边的文章已经详细说过mysql的源码安装可以点击基于LAMP的Discuz论坛的实现(源码安装)自行查看这里为了节省时间用一个shell脚本进行mysql的源码安装用到的mysql依然是5.6.46没有源码包的同学可以点击【mysql-5.6.46.tar.gz提取码:nli5】进行下载
Linux是非常热门的技术,也是当下非常受欢迎的操作系统,具有独特的优势所在,广受大家的喜欢和追捧,今天为大家分享一下几款常用的Linux系统面板,希望对你有所帮助。1、宝塔面板:是一款使用方便、功能强大而且终身免费的服务器管理软件,支持Linux以及Windows系统,一键配置LAMP/LNMP
██【電:131.乀.1418.乀.6667】【薇q:9788.乀.9181】██柬埔寨东方明珠开户目录LAMP1.安装Mariadb2.安装PHP3.测试php和apache的协同4.修改MariaDB数据库配置5.测试数据库连接LNMP(未完待续)LAMP1.安装Mariadb在RaspberryPi中,MySQL无法安装,会自动建议安装Maria
关闭防火墙安装依赖包上传源码包解压源码包,安装nginx启动nginx安装mysql和PHP相关服务修改nginx配置文件,nginx和PHP进行整合重新加载nginx服务启动php-fpm书写PHP测试页测试网页 
一.lnmp的搭建1.准备一台纯净版的虚拟机2.下载Lnmp一键安装包命令:wget http://soft.vpser.net/lnmp/lnmp1.5-full.tar.gz【安装完整版的-推荐1.5版本】也可以本地下载好,通过rz上传:http://soft.vpser.net/lnmp/lnmp1.5-full.tar.gz3.开始安装命令:cdlnmp1.5-full 
1.LNMP理论fastcgi的主要优点:把动态语言和http服务器分离开来,使nginx可以处理静态请求和向后转发动态请求,而php/php-fpm服务器转移解析PHP动态请求使用fastcgi的原因:Nginx不支持对外部动态程序的直接调用或者解析,所有的外部程序(包括PHP)必须通过FastCGI接口来调用。
keepalived高可用keepalived注意:任何软件都可以使用keepalived来做高可用keepalived如何实现高可用VRRP:虚拟路由冗余协议比如公司的网络是通过网关进行上网的,那么如果该路由器故障了,网关无法转发报文了,此时所有人都无法上网了,怎么办?通常做法是给路由器增加一台备节点,但是问
通过阿里云的服务器搭建lnmp架构以及部署wordpress个人博客,连接上域名所遇到的问题及解决办法注释:操作系统centos7.9第一步:购买阿里云ecs服务器,选择系统及其他硬件,下面是我自己购买的配置,可以参考(注意操作系统我购买的时候选错了,后来换成了centos7.9)然后在阿里云“云服
文章目录1.首先了解编译安装和yum安装的区别。2.yum安装准备工作---切换阿里云yum源3.编译安装lnmp**很不建议使用编译安装,麻烦且容易报错。**4.yum安装lnmp**可以先执行一下yumupdate**5.lnmp一键安装[参考网站](https://lnmp.org/)**不喜欢这种方式,所以没测试
电影院系统解压登录mysql创建电影院系统使用的数据库授权账户skyuc访问数据库讲系统部署到www.benet.com网站根目录下mv/usr/src/SKYUC.v3.4.2.SOURCE/wwwroot/*/var/www/benetcom/设置网站根目录所有者和权限客户机测试论坛系统部署解压复制文件到网站根目
下载:​ https://www.php.net/downloads​ https://www.php.net/distributions/php-8.0.6.tar.gz编译安装php:①安装依赖:yum-yinstalllibxml2-develsqlite-develbzip2-devellibcurl-devellibpng-devellibjpeg-develfreetype-devellibicu-develoniguruma-devellibxs
树莓派LNMP关键词:raspberrywebphpdnsmysq1LNMP、LAMP是指一组通常一起使用来运行动态网站或者服务器的自由软件名称首字母缩写,分别指Linux、Nginx/Apache、MySQL和PHP。这里演示如何在树莓派上搭建LNMP环境并配置多个站点。主要内容:树莓派安装nginx树莓派安装ph
官网:http://kodcloud.com/1、准备MySQL数据库 [root@cent8_yzl_20~]#yuminstall-ymysql-server[root@cent8_yzl_20~]#systemctlenable--nowmysqld[root@cent8_yzl_20~]#mysqlmysql>createdatabasekodbox;mysql>createuserkodbox@'10.0.0.
环境应用IP操作系统nginx192.168.122.131centos8mysql192.168.122.132centos8php192.168.122.133centos8准备工作//关闭防火墙#systemctldisable--nowfirewalld#setenforce0#vim/etc/selinux/configSELINUX=disabled安装nginx//安装依
1.购买vps或者外国云主机2.搭建ss服务端3.客户端配置服务端信息,即可。不废话,开始教程:ss-panel-v3简介ss-panel是一套功能齐全的shadowsocks用户管理面板,它可以实现用户注册、用户管理、流量控制、签到、添加多节点、充值购买、邀请返利等诸多功能,是目前网络上使用最广泛的一
LNMP架构数据迁移至NFS第一步:先将原有目录中数据移出数据存储到本地什么位置,获取方法1.通过网站页面右键点击,获取资源地址信息2.find命令利用-mmin53.利用inotify服务监控目录数据变化[root@web01wp-content]#cd/applicationginx/html/blog/wp-content/uploads[root@we
一 点睛业务上线之前最关键的一项任务便是环境部署,往往一个业务涉及多种应用环境,比如Web、DB、PROXY、CACHE等,本示例通过env.roledefs定义不同主机角色,再使用“@roles('webservers')”修饰符绑定到对应的任务函数,实现不同角色主机的部署差异。二 代码#coding=utf-8#!/usr