关于nginx:nginx-error-invalid-PID-number-in-nginxpid-的解决办法

nginx 批改配置文件后,重启的时候呈现了,这个提醒。 `nginx: [error] invalid PID number "" in "/tmp/nginx.pid"` 。 意思是说 不能在文件`/tmp/nginx.pid`中找到无效的 PID(过程ID) 。解决的方法有两种,第一kill掉nginx 主过程,而后启动nginx 。 第二: 把nginx的主过程的pid写入 nginx.pid文件,而后失常的重启。第一种办法杀掉nginx主过程,而后重启# 重启前肯定要先查看,配置文件是否正确,没有问题再重启nginx -tnginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is oknginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful# 关掉nginx 的所有过程killall nginx# 重新启动 nginxnginx第二种办法把nginx的过程号从新写入 nginx.pid 中,而后失常重启# 首先找到nginx过程 pidps aux | grep "nginx: master" | grep -v pts | awk '{print $2;}'# 或者间接写入#须要留神的是, nginx.pid 的文件的门路,不同的配置,可能门路是不同的。 能够从 nginx.conf 的主配置文件中取得。echo `ps aux | grep "nginx: master" | grep -v pts | awk '{print $2;}'` > /tmp/nginx.pid# 而后重启nginx -s reload找起因nginx 重启的时候,须要晓得,本身的PID是多少,而这个值是写在 nginx.pid 中,如果这个文件的值被批改或者删除,就会呈现问题。这个值是能够被批改的,如果把外面的值批改成其余过程的PID,用root账号重启nginx的时候,领有该PID的过程一样会被kill掉。

August 11, 2020 · 1 min · jiezi

关于nginx:Nginx-步骤学习

终端连贯近程服务器ssh name@ip //其中name指服务器登录用户名 ip指服务器地址#例:ssh root@121.196.195.3回车,输出服务器明码,不出意外曾经连上了你的服务器,接下来随心所欲吧。 根本配置启动nginx间接启动 在CentOS7.4版本里(低版本是不行的),是能够间接间接应用nginx启动服务的。 nginx应用systemctl命令启动 还能够应用个Linux的命令进行启动,我个别都是采纳这种办法进行应用。因为这种办法无论启动什么服务,都是一样的,只是换一下服务的名字(不必减少额定的记忆点)。 systemctl start nginx.service输出命令后,没有任何提醒,那咱们如何晓得Nginx服务曾经启动了哪?能够应用Linux的组合命令,进行查问服务的运行状况。 ps aux | grep nginx如果启动胜利会呈现如上面相似的后果。 root 20152 0.0 0.0 46392 976 ? Ss 13:23 0:00 nginx: master process nginxnginx 20153 0.0 0.1 46788 2172 ? S 13:23 0:00 nginx: worker processroot 20221 0.0 0.0 112648 964 pts/0 R+ 13:33 0:00 grep --color=auto nginx有这三条记录,阐明咱们Nginx被失常开启了。 进行进行Nginx服务的四种办法进行Nginx 办法有很多种,能够依据需要采纳不一样的办法,咱们一个一个阐明。 立刻进行服务nginx -s stop这种办法比拟强硬,无论过程是否在工作,都间接进行过程。 从容进行服务nginx -s quit这种办法较stop相比就比拟温和一些了,须要过程实现当前工作后再进行。 killall 办法杀死过程这种办法也是比拟横蛮的,咱们间接杀死过程,然而在下面应用没有成果时,咱们用这种办法还是比拟好的。 killall nginxsystemctl 进行systemctl stop nginx.service重启Nginx服务有时候咱们须要重启Nginx服务,这时候能够应用上面的命令。 ...

August 11, 2020 · 2 min · jiezi

关于nginx:Nginx-流控搞不好背锅跑路少不了

链接:https://www.cnblogs.com/zjfja...作者:雪山上的蒲公 前几天,以前一个老同事在微信上和我吐槽,一次周未劳动,忽然收到公司服务器告警,有一台服务器挂掉了,导致影响一部分公司业务的运行,预先查看发现原来是前端Nginx流控配置的不够迷信,不得不背上一锅,影响了这个月的KPI考核和当年中的加薪指标。 可见这Nginx流控的配置还是很重要,所以,本篇文章将会介绍Nginx的流量限度的基础知识和高级配置,”流量限度”在Nginx Plus中也实用。 流量限度(rate-limiting),是Nginx中一个十分实用,却常常被谬误了解和谬误配置的性能。咱们能够用来限度用户在给定工夫内HTTP申请的数量。申请,能够是一个简略网站首页的GET申请,也能够是登录表单的POST申请。 流量限度能够用作平安目标,比方能够减慢暴力明码破解的速率。通过将传入申请的速率限度为实在用户的典型值,并标识指标URL地址(通过日志),还能够用来抵挡DDOS攻打。更常见的状况,该性能被用来爱护上游应用服务器不被同时太多用户申请所压垮。 Nginx如何限流Nginx的”流量限度”应用漏桶算法(leaky bucket algorithm),该算法在通信和分组替换计算机网络中宽泛应用,用以解决带宽无限时的突发状况。就好比,一个桶口在倒水,桶底在漏水的水桶。如果桶口倒水的速率大于桶底的漏水速率,桶外面的水将会溢出;同样,在申请解决方面,水代表来自客户端的申请,水桶代表依据”先进先出调度算法”(FIFO)期待被解决的申请队列,桶底漏出的水代表来到缓冲区被服务器解决的申请,桶口溢出的水代表被抛弃和不被解决的申请。 配置根本的限流“流量限度”配置两个次要的指令,limit_req_zone和limit_req,如下所示: limit_req_zone $binary_remote_addr zone=mylimit:10m rate=10r/s;server {   location /login/ {     limit_req zone=mylimit;  proxy_pass http://my_upstream;  }}limit_req_zone指令定义了流量限度相干的参数,而limit_req指令在呈现的上下文中启用流量限度(示例中,对于”/login/”的所有申请)。limit_req_zone指令通常在HTTP块中定义,使其可在多个上下文中应用,它须要以下三个参数: Key - 定义利用限度的申请个性。示例中的Nginx变量remote_addr,占用更少的空间)Zone - 定义用于存储每个IP地址状态以及被限度申请URL拜访频率的共享内存区域。保留在内存共享区域的信息,意味着能够在Nginx的worker过程之间共享。定义分为两个局部:通过zone=keyword标识区域的名字,以及冒号前面跟区域大小。16000个IP地址的状态信息,大概须要1MB,所以示例中区域能够存储160000个IP地址。Rate - 定义最大申请速率。在示例中,速率不能超过每秒10个申请。Nginx实际上以毫秒的粒度来跟踪申请,所以速率限度相当于每100毫秒1个申请。因为不容许”突发状况”(见下一章节),这意味着在前一个申请100毫秒内达到的申请将被回绝。当Nginx须要增加新条目时存储空间有余,将会删除旧条目。如果开释的空间仍不够包容新记录,Nginx将会返回 503状态码(Service Temporarily Unavailable)。另外,为了避免内存被耗尽,Nginx每次创立新条目时,最多删除两条60秒内未应用的条目。limit_req_zone指令设置流量限度和共享内存区域的参数,但实际上并不限度申请速率。所以须要通过增加limit_req指令,将流量限度利用在特定的location或者server块。在下面示例中,咱们对/login/申请进行流量限度。 当初每个IP地址被限度为每秒只能申请10次/login/,更精确地说,在前一个申请的100毫秒内不能申请该URL。 解决突发如果咱们在100毫秒内接管到2个申请,怎么办?对于第二个申请,Nginx将给客户端返回状态码503。这可能并不是咱们想要的后果,因为利用实质上趋向于突发性。相同地,咱们心愿缓冲任何超额的申请,而后及时地解决它们。咱们更新下配置,在limit_req中应用burst参数: location /login/ {   limit_req zone=mylimit burst=20;    proxy_pass http://my_upstream;}burst参数定义了超出zone指定速率的状况下(示例中的mylimit区域,速率限度在每秒10个申请,或每100毫秒一个申请),客户端还能发动多少申请。上一个申请100毫秒内达到的申请将会被放入队列,咱们将队列大小设置为20。 这意味着,如果从一个给定IP地址发送21个申请,Nginx会立刻将第一个申请发送到上游服务器群,而后将余下20个申请放在队列中。而后每100毫秒转发一个排队的申请,只有当传入申请使队列中排队的申请数超过20时,Nginx才会向客户端返回503。 无提早的排队配置burst参数将会使通信更晦涩,然而可能会不太实用,因为该配置会使站点看起来很慢。在下面的示例中,队列中的第20个包须要期待2秒能力被转发,此时返回给客户端的响应可能不再有用。要解决这个状况,能够在burst参数后增加nodelay参数: location /login/ {   limit_req zone=mylimit burst=20 nodelay;   proxy_pass http://my_upstream;}应用nodelay参数,Nginx仍将依据burst参数调配队列中的地位,并利用已配置的速率限度,而不是清理队列中期待转发的申请。相同地,当一个申请达到“太早”时,只有在队列中能调配地位,Nginx将立刻转发这个申请。将队列中的该地位标记为”taken”(占据),并且不会被开释以供另一个申请应用,直到一段时间后才会被开释(在这个示例中是,100毫秒后)。 假如如前所述,队列中有20个空位,从给定的IP地址收回的21个申请同时达到。Nginx会立刻转发这个21个申请,并且标记队列中占据的20个地位,而后每100毫秒开释一个地位。如果是25个申请同时达到,Nginx将会立刻转发其中的21个申请,标记队列中占据的20个地位,并且返回503状态码来回绝剩下的4个申请。 当初假如,第一组申请被转发后101毫秒,另20个申请同时达到。队列中只会有一个地位被开释,所以Nginx转发一个申请并返回503状态码来回绝其余19个申请。如果在20个新申请达到之前曾经过来了501毫秒,5个地位被开释,所以Nginx立刻转发5个申请并回绝另外15个。 成果相当于每秒10个申请的“流量限度”。如果心愿不限度两个申请间容许距离的状况下施行“流量限度”,nodelay参数是很实用的。 留神:对于大部分部署,咱们倡议应用burst和nodelay参数来配置limit_req指令。 高级配置示例通过将根本的“流量限度”与其余Nginx性能配合应用,咱们能够实现更细粒度的流量限度。 白名单 上面这个例子将展现,如何对任何不在白名单内的申请强制执行“流量限度”: geo $limit {  default        1;  10.0.0.0/8       0;   192.168.0.0/64     0;}map $limit $limit_key {    0 "";   1 $binary_remote_addr;}limit_req_zone $limit_key zone=req_zone:10m rate=5r/s;server { location / {      limit_req zone=req_zone burst=10 nodelay;     # ...    }}这个例子同时应用了geo和map指令。geo块将给在白名单中的IP地址对应的$limit变量调配一个值0,给其它不在白名单中的调配一个值1。而后咱们应用一个映射将这些值转为key,如下: 如果变量的值是,limit_key变量将被赋值为空字符串如果变量的值是,limit_key变量将被赋值为客户端二进制模式的IP地址 两个指令配合应用,白名单内IP地址的$limit_key变量被赋值为空字符串,不在白名单内的被赋值为客户端的IP地址。当limit_req_zone后的第一个参数是空字符串时,不会利用“流量限度”,所以白名单内的IP地址(10.0.0.0/8和192.168.0.0/24 网段内)不会被限度。其它所有IP地址都会被限度到每秒5个申请。limit_req指令将限度利用到/的location块,容许在配置的限度上最多超过10个数据包的突发,并且不会提早转发。 ...

August 11, 2020 · 1 min · jiezi

关于nginx:Nginx

一、集群架构服务器架构集群: 多台服务器组成的响应大并发、高数据量拜访的架构体系。特点: 老本高可能升高单台服务器的压力,应用流量平均分配到多台服务器 使网站服务架构更加平安稳固 服务器: 提供某种或者多种服务(性能)的机器(计算机) 硬件:性能比拟好的电脑主机软件:实现各种服务反对特定的协定的软件 1、web服务软件提供http https协定的服务器,网站网页拜访的性能 Apache Nginx 2、数据库mysql oracle 3、负载平衡负载平衡服务器,散发申请到不同的服务器。使流量平均分配。 硬件级别:F5 性能好,价格高 软件级别:性价比高 lvs linux下散发软件 Nginx upstream性能散发 4、资源服务器资源服务区存储动态资源,css、js、图片、视频。个别此服务器会有硬盘(SSD固态)读写疾速,带宽更大。 5、反向代理服务器反向代理服务器具备代理申请到对应的服务器的性能,也具备缓存的性能 squid、 varnish、 Nginx、 6、高可用高可用服务器,用来监控负载平衡服务器,如果一旦负载平衡宕机、会接替负载平衡服务器的工作,持续进行网络的散发工作。 能够认为是负载平衡的备用服务器 heartbeat keeplive 7、缓存软件memcached redis 8、cdn内容散发二、Nginx的介绍它能够高并发连贯,官网测试可能撑持5万并发连贯,在理论生产环境中能够撑持2到4万并发连贯。内存耗费少Nginx+php(FastCGI)服务器在3万并发连贯下, 开启的10个Nginx过程耗费150MB内存(15MB * 10=150MB) 开启的64个php-cgi过程耗费1280MB内存(20MB*64=1280MB) 老本低廉购买F5 BIG-IP ,NetScaler等硬件负载平衡交换机须要10多万甚至几十万人民币。而Nginx为开源软件,能够收费试用,并且可用于商业用途。 配置文件非常简单:通俗易懂,即便非专业管理员也能看懂。反对 rewrite重写规定:能依据域名、URL的不同,将HTTP申请分到不同的后端服务器群组。内置的健康检查性能:如果nginx proxy后端的某台服务器宕机了,不会影响前端拜访。节俭带宽,反对gzip压缩。稳定性高:用于反向代理,宕机的概率微不足道。反对热部署。在不间断服务的状况下,对软件版本升级。 nginx在反向代理,rewrite规定,稳定性,动态化文件解决,内存耗费等方面,体现出了很强的劣势,选用nginx取代传统的apache 服务器,将会取得多方面的性能晋升。三、装置Nginx1、装置依赖gcc 装置装置 nginx 须要先将官网下载的源码进行编译,编译依赖 gcc 环境,如果没有 gcc 环境,则须要装置: yum install gcc gcc-c++PCRE pcre-devel 装置PCRE(Perl Compatible Regular Expressions) 是一个Perl库,包含 perl 兼容的正则表达式库。 nginx 的 http 模块应用 pcre 来解析正则表达式,所以须要在 linux 上装置 pcre 库,pcre-devel 是应用 pcre 开发的一个二次开发库。nginx也须要此库。 ...

August 8, 2020 · 6 min · jiezi

关于nginx:Nginx

一、集群架构服务器架构集群: 多台服务器组成的响应大并发、高数据量拜访的架构体系。特点: 老本高可能升高单台服务器的压力,应用流量平均分配到多台服务器 使网站服务架构更加平安稳固 服务器: 提供某种或者多种服务(性能)的机器(计算机) 硬件:性能比拟好的电脑主机软件:实现各种服务反对特定的协定的软件 1、web服务软件提供http https协定的服务器,网站网页拜访的性能 Apache Nginx 2、数据库mysql oracle 3、负载平衡负载平衡服务器,散发申请到不同的服务器。使流量平均分配。 硬件级别:F5 性能好,价格高 软件级别:性价比高 lvs linux下散发软件 Nginx upstream性能散发 4、资源服务器资源服务区存储动态资源,css、js、图片、视频。个别此服务器会有硬盘(SSD固态)读写疾速,带宽更大。 5、反向代理服务器反向代理服务器具备代理申请到对应的服务器的性能,也具备缓存的性能 squid、 varnish、 Nginx、 6、高可用高可用服务器,用来监控负载平衡服务器,如果一旦负载平衡宕机、会接替负载平衡服务器的工作,持续进行网络的散发工作。 能够认为是负载平衡的备用服务器 heartbeat keeplive 7、缓存软件memcached redis 8、cdn内容散发二、Nginx的介绍它能够高并发连贯,官网测试可能撑持5万并发连贯,在理论生产环境中能够撑持2到4万并发连贯。内存耗费少Nginx+php(FastCGI)服务器在3万并发连贯下, 开启的10个Nginx过程耗费150MB内存(15MB * 10=150MB) 开启的64个php-cgi过程耗费1280MB内存(20MB*64=1280MB) 老本低廉购买F5 BIG-IP ,NetScaler等硬件负载平衡交换机须要10多万甚至几十万人民币。而Nginx为开源软件,能够收费试用,并且可用于商业用途。 配置文件非常简单:通俗易懂,即便非专业管理员也能看懂。反对 rewrite重写规定:能依据域名、URL的不同,将HTTP申请分到不同的后端服务器群组。内置的健康检查性能:如果nginx proxy后端的某台服务器宕机了,不会影响前端拜访。节俭带宽,反对gzip压缩。稳定性高:用于反向代理,宕机的概率微不足道。反对热部署。在不间断服务的状况下,对软件版本升级。 nginx在反向代理,rewrite规定,稳定性,动态化文件解决,内存耗费等方面,体现出了很强的劣势,选用nginx取代传统的apache 服务器,将会取得多方面的性能晋升。三、装置Nginx1、装置依赖gcc 装置装置 nginx 须要先将官网下载的源码进行编译,编译依赖 gcc 环境,如果没有 gcc 环境,则须要装置: yum install gcc gcc-c++PCRE pcre-devel 装置PCRE(Perl Compatible Regular Expressions) 是一个Perl库,包含 perl 兼容的正则表达式库。 nginx 的 http 模块应用 pcre 来解析正则表达式,所以须要在 linux 上装置 pcre 库,pcre-devel 是应用 pcre 开发的一个二次开发库。nginx也须要此库。 ...

August 8, 2020 · 6 min · jiezi

关于nginx:NginxWebUI-180版本发布

Nginx作为一个轻量级的HTTP服务器,相比Apache劣势也是比拟显著的,在性能上它占用资源少,能反对更高更多的并发连贯,从而达到进步拜访效率;在性能上它是一款十分优良的代理服务器与负载平衡服务器。 常常在运维面试中,面试官会问到,你们用什么HTTP服务器啊?为什么用它?? 1、作为WEB服务器而言,Nginx解决动态文件的效率比拟高 2、作为代理服务器而言,Nginx能够实现无缓存的反向代理减速来进步WEB站点的运行速度,进步用户拜访的体验 3、作为负载平衡服务器而言,反对的利用较多,同时也反对容错性能,自带算法进行负载平衡调度 4、性能方面而言,采纳内核poll模型,反对更多的并发连贯,官网显示最大可反对50000个并发连贯的申请响应,但占用资源很少且十分稳固 所以,无论是开发、运维、测试,都会接触到Nginx,而且都须要把握一些Nginx的常识,像装置、配置、调试等,特地是对于Nginx配置尤其重要。 之前,民工哥也给大家具体介绍这款工具:Nginx WebUI 太赞了!墙裂举荐这款网页版 Nginx 配置生成器,好用到爆! 具体的性能与操作介绍,下面的文章都有。 除了nginx的conf可视化配置以外, nginxWebUI还提供以下性能: 动态网页包可上传并进行对立治理ssl证书可在线申请并定时续签. 对立对ssl进行治理及部署集成nginx效验, 重载, 启动, 进行命令, 可在网页上对nginx运行状态进行操作可在一台服务器上远程管理其余nginxWebUI服务器, 能够在一个网址上批改复数的nginx集群配置, 同时提供集群nginx服务运行状态监控性能, 应用邮件进行宕机揭示可对nginx中配置的负载平衡节点进行运行状态监控,  应用邮件进行宕机揭示.集成nginx日志解析性能, 可配置是否生成nginx日志及定时对nginx日志进行解析可反向导入已有的nginx配置文件, 可疾速克隆已有反向代理配置, 可查看反向代理的端口占用提供零碎cpu 内存 硬盘运行状态监测目前NginxWebUI 1.8.0 公布,同时更新了一些新的性能: 参数配置项增加程序配置动态文件增加更新性能增加参数模板性能更新docker内的nginx版本为1.18增加立即解析今日日志 性能替换配置文件时,革除遗留旧配置文件增加conf文件根本导入性能

August 8, 2020 · 1 min · jiezi

关于nginx:Nginx-反向代理负载均衡及搭建高可用集群

Nginx 反向代理,负载平衡及搭建高可用集群前提筹备首先是对于linux环境下的装置(本地机器是Windows版本,大家能够应用Vmware,然而须要配置网络连接等,这里就不再展现虚拟机上的演示。这里应用到集体的阿里云云服务器搭配上xftp与xshell来进行文件的上传与连贯命令行的输出) 留神:以下命令皆为CentOS7所应用。 上面开始进行系列依赖的装置: <div align = "center"><img src= "http://maycope.cn/images/image-20200807092205021.png"></div> gcc 装置:yum -y install gcc automake autoconf libtool makeyum install gcc gcc-c++pcre 装置cd /usr/local/srcwget https://netix.dl.sourceforge.net/project/pcre/pcre/8.40/pcre-8.40.tar.gztar -zxvf pcre-8.40.tar.gzcd pcre-8.40./configuremake && make installzlib 装置cd /usr/local/srcwget http://zlib.net/zlib-1.2.11.tar.gz wget http://www.zlib.net/zlib-1.2.11.tar.gztar -zxvf zlib-1.2.11.tar.gzcd zlib-1.2.11./configuremake && make installyum install -y zlib zlib-developenssl 装置cd /user/local/scrwget https://www.openssl.org/source/openssl-1.0.1t.tar.gztar -zxvf openssl-1.0.1t.tar.gznginx 装置cd /user/local/scrwget http://nginx.org/download/nginx-1.1.10.tar.gztar zxvf nginx-1.1.10.tar.gzcd nginx-1.1.10./configuremake && make install启动nginx/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf实现之后能够后行查看本人的本人的服务器凋谢了哪些的端口: firewall-cmd --list-all 若是没有进行端口的开发能够应用如下命令进行端口的凋谢: ...

August 8, 2020 · 3 min · jiezi

关于nginx:Nginx-反向代理负载均衡及搭建高可用集群

Nginx 反向代理,负载平衡及搭建高可用集群前提筹备首先是对于linux环境下的装置(本地机器是Windows版本,大家能够应用Vmware,然而须要配置网络连接等,这里就不再展现虚拟机上的演示。这里应用到集体的阿里云云服务器搭配上xftp与xshell来进行文件的上传与连贯命令行的输出) 留神:以下命令皆为CentOS7所应用。 上面开始进行系列依赖的装置: <div align = "center"><img src= "http://maycope.cn/images/image-20200807092205021.png"></div> gcc 装置:yum -y install gcc automake autoconf libtool makeyum install gcc gcc-c++pcre 装置cd /usr/local/srcwget https://netix.dl.sourceforge.net/project/pcre/pcre/8.40/pcre-8.40.tar.gztar -zxvf pcre-8.40.tar.gzcd pcre-8.40./configuremake && make installzlib 装置cd /usr/local/srcwget http://zlib.net/zlib-1.2.11.tar.gz wget http://www.zlib.net/zlib-1.2.11.tar.gztar -zxvf zlib-1.2.11.tar.gzcd zlib-1.2.11./configuremake && make installyum install -y zlib zlib-developenssl 装置cd /user/local/scrwget https://www.openssl.org/source/openssl-1.0.1t.tar.gztar -zxvf openssl-1.0.1t.tar.gznginx 装置cd /user/local/scrwget http://nginx.org/download/nginx-1.1.10.tar.gztar zxvf nginx-1.1.10.tar.gzcd nginx-1.1.10./configuremake && make install启动nginx/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf实现之后能够后行查看本人的本人的服务器凋谢了哪些的端口: firewall-cmd --list-all 若是没有进行端口的开发能够应用如下命令进行端口的凋谢: ...

August 8, 2020 · 3 min · jiezi

关于nginx:宝塔开发多域名问题

[问题形容]1.我应用php开发我的项目2.应用有很多个我的项目3.我应用的是环境是 nginx+php-fpm4.每次新增一个我的项目,为了不便本地调试和不影响其余我的项目开发我都须要新增host,在nginx配置server_name辨别不同的我的项目 xx1.xx.com 127.0.0.1xx2.xx.com 127.0.0.1[问题剖析]我所有的A记录都是指向127.0.0.1,有没有一个泛域名解析能够指向127.0.0.1,不必每次修复127.0.0.1 当初有了,我在我的dns中增加了个泛域名解析 *.localhost.litongjava.com 127.0.0.1因为指向的127.0.0.1 所以不存域名抵触的问题测试后果如下

August 7, 2020 · 1 min · jiezi

关于nginx:前端自动化集成部署交付实践

前言随着前后端拆散利用模式的推广,前端我的项目可独立部署保护上线,不再仅仅将前端开发后打包的文件间接丢到一个文件目录下就完事大吉了,当初对前端来说也须要理解运维的相干常识,本文旨在介绍一些相干的运维概念以及一些前端运维的实际。 CI/CD 继续集成continuous integration 继续集成是一种软件实际,流程为:开发 => 打包 => 集成 => 测试继续交付continuous delivery 继续交付是一种软件工程手法,流程为:测试 => 公布继续部署continous deployment 继续部署是在继续交付的管道中公布版本给最终用户的一种软件工程流程,流程为:公布 => 部署上线继续集成、继续交付、继续部署是公布流程的不同阶段 Docker 容器 + 镜像docker 是一个开源的利用容器引擎。开发者能够打包本人的利用到容器外面,而后迁徙到其余机器的 docker 利用中;开发者能够疾速制作一个本人自定义的镜像,疾速分享,也能够上传到镜像库进行存取和治理;容器之间互相隔离不抵触,硬件资源共享。Docker in Docker容器内仅部署 docker 命令行工具(作为客户端),理论执行交由宿主机内的 docker-engine(服务器)Jenkins 概念Jenkins 是一个基于Java语言开发的CI继续构建工具,次要用于继续、主动的构建/测试软件我的项目。它能够执行你事后设定好的设置和脚本,也能够和 Git工具做集成,实现主动触发和定时触发器构建。Gitlab 概念gitlab既是一种服务,也是一种软件。既能够在gitlab.com下来租用服务,也能够下载gitlab阮籍你本人搭建服务Nginx 概念Nginx采纳C进行编写,解决动态文件,索引文件以及主动索引;关上文件描述符缓冲。无缓存的反向代理减速,简略的负载平衡和容错。FastCGI,简略的负载平衡和容错。模块化的构造。Nginx是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务 Nexus 概念制品仓库: 构建过程的输入物,包含软件包,测试报告,利用配置文件等可在服务器上间接 运行或可查看二进制模式的文件,通常称之为二进制软件制品。具备版本治理,历史治理,权限校验等性能。Nexus可在本人的局域网内搭建本人的近程仓库服务器,称为私服,私服服务器即是公司外部的maven近程仓库,私服还充当一个代理服务器,可从互联网地方仓库主动下载 proxy 本地仓库,通常咱们会部署本人的构件到这一类型的仓库。比方公司的第二方库hosted 代理仓库,它们被用来代理近程的公共仓库,如maven地方仓库group 仓库组,用来合并多个hosted/proxy仓库,当你的我的项目心愿在多个repository应用资源时就不须要屡次援用了,只须要援用一个group即可Ansible 概念ansible是基于Python开发的自动化运维工具。其劣势在于能够批量操作,基本原理是通过ansible的外围进行通过ssh传输的通信进行相干的散发解决,进行user与host的通信Modules执行命令的功能模块,Ansible2.3版本为止,共有1039个模块。还能够自定义模块 Inventory治理主机的清单,默认是/etc/ansible/hosts文件 Playbook工作剧本(又称工作集),编排定义Ansible工作集的配置文件,由Ansible程序顺次执行,yaml格局 Plugins插件,模块性能的补充,常有连贯类型插件,循环插件,变量插件,过滤插件,插件性能用的较少 API提供给第三方程序调用的应用程序编程接口 实际操作环境: linux/centos7 操作内容: 一台 gitlab + jenkins + ansible 服务器推送多台 nginx 服务器 docker装置依赖yum install -y yum-utils device-mapper-persistent-data lvm2应用阿里云源装置sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repoyum install docker-ce启动dockersystemctl start dockersystemctl enable docker可配置阿里云容器镜像加速器阿里云容器镜像服务 ...

August 6, 2020 · 3 min · jiezi

关于nginx:Centos下-Nginx安装与配置

搬运至我原来的简书主页https://www.jianshu.com/p/d51... Nginx是一款轻量级的网页服务器、反向代理服务器。相较于Apache、lighttpd具备占有内存少,稳定性低等劣势。它最常的用处是提供反向代理服务。 装置在Centos下,yum源不提供nginx的装置,能够通过切换yum源的办法获取装置。目前很多像centos7零碎曾经自带这几个库,所以装置前能够先查看一下本地是否曾经存在。存在可间接跳至第四步骤。须要应用安装包编译装置的,如下。以下命令均需root权限执行: 首先装置必要的库(nginx 中gzip模块须要 zlib 库,rewrite模块须要 pcre 库,ssl 性能须要openssl库)。选定/usr/local为装置目录,以下具体版本号依据理论扭转。 1.装置PCRE库 $ cd /usr/local/$ sudo wget ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.36.tar.gz$ sudo tar -zxvf pcre-8.36.tar.gz$ cd pcre-8.36$ sudo ./configure$ sudo make$ sudo make install2.装置zlib库 $ cd /usr/local/ $ sudo wget http://zlib.net/zlib-1.2.8.tar.gz$ sudo tar -zxvf zlib-1.2.8.tar.gz$ cd zlib-1.2.8$ sudo ./configure$ sudo make$ sudo make install3.装置ssl $ cd /usr/local/$ sudo wget http://www.openssl.org/source/openssl-1.0.1j.tar.gz$ sudo tar -zxvf openssl-1.0.1j.tar.gz$ sudo ./config$ sudo make$ sudo make install4.装置nginx ...

August 4, 2020 · 2 min · jiezi

关于nginx:Ubuntu-下-使用nginx设置用户名密码访问

1.下载工具 sudo apt-get install apache2-utils增加用户名明码htpasswd -c /etc/nginx/.htpasswd username输出明码,提醒如下: New password:Re-type new password:Adding password for user exampleuserhtpaswd的.htpasswd文件格式如下: login:password留神:htpasswd须要对nginx运行用户可拜访 增加配置到NGINX配置 如: server {listen 80;server_name home.moosrtc.com;location / { root /codes/index; index index.htm index.html; auth_basic "Restricted"; auth_basic_user_file /etc/nginx/.htpasswd; } }重启 sudo service nginx restart

August 3, 2020 · 1 min · jiezi

关于nginx:Nginx配置密码访问访问网页需输入用户名密码

须要实现的需要如下: nginx做web服务,但因为平安问题需要,拜访网页时须要输出用户名和明码进行认证,成果如下服务器零碎是centos7.x实现步骤: 1. 装置明码生成工具$ yum -y install httpd-tools2. 生成用户和密码文件生成用户和明码 $ htpasswd -c /usr/local/nginx/password username# 回车后输出明码# -c 创立一个加密文件查看生成的用户和明码 如果要批改明码,或者删除明码,请参考上面操作 删除用户和明码 $ htpasswd -D /usr/local/nginx/password username# -D 删除指定的用户批改用户和明码 $ htpasswd -D /usr/local/nginx/password username$ htpasswd -b /usr/local/nginx/password username pass# -D 删除指定的用户# -b htpassswd命令行中一并输出用户名和明码而不是依据提醒输出明码# -p htpassswd命令不对明码进行进行加密,即明文明码3. 配置Nginx认证找到 nginx 配置文件,通常默认的配置文件在/usr/local/nginx/conf/nginx.conf,要对整个站点开启验证,需在配置文件中的server加上认证配置auth_basic 和 auth_basic_user_file server { listen 80; server_name localhost; # ... auth_basic "请输出用户和明码"; # 验证时的提示信息 auth_basic_user_file /usr/local/nginx/password; # 认证文件 location / { root /var/www; index index.html index.htm; } # ...}4. 重启/重载Nginx使站点的认证失效/usr/local/nginx/sbin/nginx -s reload这时候再新拜访网站,则会提醒须要输出用户名和明码,成果如下面第一张成果图示。 ...

August 1, 2020 · 1 min · jiezi

关于nginx:Centos7-Nginx区分路径部署多个Vue项目

Nginx辨别门路部署多个Vue我的项目nginx 多动态文件部署。我集体博客我的项目占用了nginx根门路,而我只有一个域名,也不筹备用二级域名了, 所以就间接用门路辨别开。一个域名,只部署一个动态文件服务,那很简略,只用把打包后文件放上去就行。多个Vue我的项目次要就是门路问题,动态js文件以及自定义的路由。原本不打算把这篇文章般到思否的,然而感觉好多人问这个对于nginx部署vue的我的项目。 集体我的项目部署地址我的项目Github地址: https://github.com/CoderCharm... 我的项目线上部署地址: https://www.charmcode.cn/app/... 环境vue 2.6.11vue-router 3.3.1vue-cli 4.4.0因为我用的vue-cli 4,所以我的项目根门路下默认没有 vue.config.js文件, 我在官网看到对于这个vue.config.js是这样形容的. 参考官网阐明https://cli.vuejs.org/zh/config/:有些针对 @vue/cli 的全局配置,例如你习用的包管理器和你本地保留的 preset,都保留在 home 目录下一个名叫 .vuerc 的 JSON 文件。你能够用编辑器间接编辑这个文件来更改已保留的选项。 你也能够应用 vue config 命令来审查或批改全局的 CLI 配置增加配置vue.config.js 文件 动态资源路由js,css等门路然而 vue config 是全局的配置,我这个我的项目间接批改这里不适合,于是我就在我的项目 根门路 下本人手动增加了vue.config.js // 参考 https://cli.vuejs.org/zh/guide/deployment.html#github-pagesmodule.exports = { publicPath: process.env.NODE_ENV === 'production' ? '/app/mall/' // /app/mall/ 对应前面`nginx`门路,这里增加的目标是其余动态资源文件对立前缀门路 : '/',};批改src/router/index.js, 我的项目页面跳转路由const router = new VueRouter({ base: '/app/mall', // 次要增加这个 /app/mall 留神这个 和下面的统一,为nginx location门路, 也就是申请门路 routes, mode: 'history'});批改 src/config/index.js 我的项目生产申请地址(非必要)非必要,这个中央每个人封装的都不一样,默认会申请 部署的环境地址。export let appConfig = { development: 'http://127.0.0.1:8010', // 本地开发 (ps:vue-cli会主动帮咱们辨别生产开发,npm run serve就是开发, production: 'https://www.your_domain.com', // 生产地址 npm run build 默认为生产};而后 我是在src/utils/url.js 文件外面 辨别前缀的, 最初在 src/utils/request.js 文件外面应用。批改好之后,能够npm run serve看看,辨别好之后是否失常拜访,是否有改错。没有改错能够间接npm run build 生成动态文件 ...

July 29, 2020 · 1 min · jiezi

关于nginx:解决-nginx-跨域-问题

在nginx的配置文件中减少: location / { add_header Access-Control-Allow-Origin $http_origin; add_header Access-Control-Allow-Methods 'GET,POST,OPTIONS'; add_header Access-Control-Allow-Credentials true; add_header Access-Control-Allow-Headers *; add_header Access-Control-Max-Age 1728000; if ($request_method = 'OPTIONS') { return 204; }}

July 29, 2020 · 1 min · jiezi

关于nginx:Nginx配置404自定义页面

1. 批改nginx.conf httpnginx.conf 文件http 区域增加 fastcgi_intercept_errors on; http { ....... fastcgi_intercept_errors on;2. 配置conf server配置error_page 404 server { listen 80; server_name www.zhangguoye.com; index index.html index.htm; root /home/wwwroot; error_page 404 /404.html; location = /404.html { root /home/wwwroot/; # 在此目录下增加自定义的404.html }3. 重启nginx应用restart 或者 reload 重启nginx,使配置失效。

July 29, 2020 · 1 min · jiezi

关于nginx:Nginx-配置大文件上传

nginx问题遇到的问题: Nginx: 413 – Request Entity Too Large Error and SolutionTIMEOUT解决办法解决办法:在nginx的配置文件下(通常为xxx.conf),加上以下配置: client_max_body_size 50m; # 限度申请体的大小,若超过所设定的大小,返回413谬误,默认1mclient_header_timeout 1m; # 读取申请头的超时工夫,若超过所设定的大小,返回408谬误client_body_timeout 1m; # 读取申请实体的超时工夫,若超过所设定的大小,返回413谬误proxy_connect_timeout 60s; # http申请无奈立刻被容器(tomcat, netty等)解决,被放在nginx的待处理池中期待被解决。此参数为期待的最长工夫,默认为60秒,官网举荐最长不要超过75秒proxy_read_timeout 1m; # http申请被容器(tomcat, netty等)解决后,nginx会期待处理结果,也就是容器返回的response。此参数即为服务器响应工夫,默认60秒proxy_send_timeout 1m; # http申请被服务器解决完后,把数据传返回给Nginx的用时,默认60秒server { listen 80; server_name localhost; client_max_body_size 10m; client_header_timeout 5m; client_body_timeout 5m; proxy_connect_timeout 6000s; proxy_read_timeout 5m; proxy_send_timeout 5m; location / { # ... }} 重启nginx设置实现后,须要应用 reload 或者reload重启nginx

July 28, 2020 · 1 min · jiezi

关于nginx:解决nginx-反向代码-apache服务下的wordpress发生301循环重定向的问题

在应用nginx反向代码wordpress的过程中,因为wordpress会对拜访的申请进行域名与端口是否与配置信息雷同的判断,将导致应用301的循环重定向谬误。 问题重现nginx配置如下: server { listen 81; server_name www.baeldung.cn; error_log /mengyunzhi/log/baeldung.cn-nginx.log info; add_header Cache-Control public; location / { proxy_pass http://127.0.0.1:8000; proxy_redirect off; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-Host $host; proxy_set_header X-Forwarded-Server $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; # 转发host信息 proxy_set_header Host $host;wordpress设置站点的url地址为:http://www.baeldung.cn:81。则在上述两个配置下应用浏览器拜访:http://www.baeldung.cn:81则会执行如下流程: 问题在于:nginx在进行数据发设置的Host并不蕴含端口信息,所以wordpress接管到的申请是:http://www.baeldung.cn:8000此地址与http://www.baeldung.cn:81并不相同,所以给出了重定向的回复。浏览器接管到重定向,接着发动了对http://www.baeldung.cn:81的申请,周而复始浏览器便出了301重定向次数过多的提醒。 解决方案google尝试找了些对于nginx如何反向代理wordpress或nginx反向代码wordpress产生301 loop的问题,但并未找到答案。猜测可能是因为 wordpress这个重定向机制启用的工夫并不长,所以相干的问题裸露的不多造成的。 通过后面的流程图,最终猜测出了解决方案:转发时设置Host时退出端口号: proxy_set_header Host $host:$server_port;从新加载nginx配置后问题迎刃而解。 总结当一些问题查找不出起因的时候,须要联合控制台返回的信息并站在软件设计者的角度大胆地猜想一下。一旦猜出了方向,便能够依照猜的方向进行尝试。没准就真猜对了呢。 本文作者:河北工业大学梦云智开发团队 潘杰欢送各位学子报考我校!

July 23, 2020 · 1 min · jiezi

关于nginx:mac安装nginx

一、先装置brew国内疾速装置homebrew参考这篇文章https://zhuanlan.zhihu.com/p/...二、装置nginx应用命令brew install nginx装置最新版本的nginx三、保留nginx的装置信息 ==> nginxDocroot is: /usr/local/var/wwwThe default port has been set in /usr/local/etc/nginx/nginx.conf to 8080 so thatnginx can run without sudo.nginx will load all files in /usr/local/etc/nginx/servers/.To have launchd start nginx now and restart at login: brew services start nginxOr, if you don't want/need a background service you can just run: nginx如果想开机后盾运行:brew services start nginx不想开机运行:nginx四、常用命令 启动 nginx #浏览器拜访 127.0.0.1 测试是否胜利启动 重启 nginx -s reload 进行 nginx -s stop查看版本 nginx -v

July 22, 2020 · 1 min · jiezi

关于nginx:Nginx-操作小册

nginx配置的公共配置局部抽取进去在nginx.conf同文件夹下新建文件common_rules.conf # proxy_pass http://27.175.67.297:8000;proxy_pass https://wgcent.store.cn; 间接在nginx.conf中以include应用 location /wcg/api/order/paymentRequest { rewrite .* /wc/api/orider/tRequest break; include common_rules.conf; } location /wcg/api/order/queryPaymentStatus { rewrite .* /wc/api/order/querStatus break; include common_rules.conf; }

July 21, 2020 · 1 min · jiezi

关于nginx:nginx心得

nginx简介(参考百度)Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务。Nginx是由伊戈尔·赛索耶夫为俄罗斯访问量第二的Rambler.ru站点(俄文:)开发的,第一个公开版本0.1.0公布于2004年10月4日。其将源代码以类BSD许可证的模式公布,因它的稳定性、丰盛的功能集、示例配置文件和低系统资源的耗费而闻名。2011年6月1日,nginx 1.0.4公布。 Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,在BSD-like 协定下发行。其特点是占有内存少,并发能力强,事实上nginx的并发能力在同类型的网页服务器中体现较好,中国大陆应用nginx网站用户有:百度、京东、新浪、网易、腾讯、淘宝等。 nginx装置1.装置编译工具及库文件yum -y install make zlib zlib-devel gcc-c++ libtool openssl openssl-devel2.装置 PCREcd /usr/local/src/wget http://downloads.sourceforge.net/project/pcre/pcre/8.35/pcre-8.35.tar.gz3.装置Nginxcd /usr/local/src/wget http://nginx.org/download/nginx-1.6.2.tar.gz参考(https://www.runoob.com/linux/...) nginx根本构造高度模块化的设计是 Nginx 的架构根底。Nginx 服务器被合成为多个模块,每个模块就是一个功能模块,只负责本身的性能,模块之间严格遵循“高内聚,低耦合”的准则 外围模块外围模块是 Nginx 服务器失常运行必不可少的模块,提供谬误日志记录、配置文件解析、事件驱动机制、过程治理等外围性能。 规范 HTTP 模块规范 HTTP 模块提供 HTTP 协定解析相干的性能,如:端口配置、网页编码设置、HTTP 响应头设置等。 可选 HTTP 模块可选 HTTP 模块次要用于扩大规范的 HTTP 性能,让 Nginx 能解决一些非凡的服务,如:Flash 多媒体传输、解析 GeoIP 申请、SSL 反对等。 邮件服务模块邮件服务模块次要用于反对 Nginx 的邮件服务,包含对 POP3 协定、IMAP 协定和 SMTP 协定的反对。 第三方模块第三方模块是为了扩大 Nginx 服务器利用,实现开发者自定义性能,如:Json 反对、Lua 反对等。参考(https://www.sohu.com/a/230364...) nginx基本功能web服务器、反向代理服务器负载平衡动静拆散nginx长处1.能够高并发连贯官网测试Nginx可能撑持5万并发连贯,理论生产环境中能够撑持2~4万并发连接数。 起因,次要是Nginx应用了最新的epoll(Linux2.6内核)和kqueue(freeBSD)网路I/O模型,而Apache应用的是传统的Select模型,其比较稳定的Prefork模式为多过程模式,须要常常派生子过程,所以耗费的CPU等服务器资源,要比Nginx高很多。2.内存耗费少Nginx+PHP(FastCGI)服务器,在3万并发连贯下,开启10个Nginx过程耗费150MB内存,15MB*10=150MB,开启的64个PHP-CGI过程耗费1280内存,20MB*64=1280MB,加上零碎本身耗费的内存,总共耗费不到2GB的内存。 ...

July 20, 2020 · 3 min · jiezi

Nginx配置中一个不起眼字符的巨大作用失之毫厘谬以千里

Nginx作为一个轻量级的,高性能的web服务软件,因其占有内存少,并发能力强的特点,而广受欢迎和应用。国内很多大型互联网公司也对Nginx很是青眼。像BAT(百度,阿里和腾讯),TMD(头条,美团和滴滴)等等。应用过Nginx的同学都晓得,你只须要按需要精确的更改好配置启动,那么就能够优雅的拜访它了。所以说Nginx对配置文件的很是看中呢,这就要求咱们更改配置文件时肯定要再三确认,要不然可能因为忽略而引发惨案呢? 实在案例,就因为在配置时,少些了一个字符“/”,就造成拜访不通报错,因此接到投诉。那么是怎么引起的呢?起因就是:Nginx在配置proxy_pass代理转接时,少些“/”字符造成的。 有同学就有疑难,加不加“/”,区别真的那么大吗?咱们带着这个疑难,来探索下这个问题。location目录匹配详解 nginx每个location都是一个匹配目录,nginx的策略是:拜访申请来时,会对拜访地址进行解析,从上到下一一匹配,匹配上就执行对应location大括号中的策略,并依据策略对申请作出相应。 以拜访地址:http://www.wandouduoduo.com/w...,nginx配置如下: location /wddd/  {         proxy_connect_timeout 18000; ##批改成半个小时                        proxy_send_timeout 18000;                  proxy_read_timeout 18000;                proxy_pass http://127.0.0.1:8080;     }那拜访时就会匹配这个location,从而把申请代理转发到本机的8080Tomcat服务中,Tomcat相应后,信息原路返回。总结:location如果没有“/”时,申请就能够含糊匹配以字符串结尾的所有字符串,而有“/”时,只能准确匹配字符自身。 上面举个例子阐明: 配置location /wandou能够匹配/wandoudouduo申请,也能够匹配/wandou*/duoduo等等,只有以wandou结尾的目录都能够匹配到。而location /wandou/必须准确匹配/wandou/这个目录的申请,不能匹配/wandouduoduo/或/wandou*/duoduo等申请。 proxy_pass有无“/”的四种区别探索 拜访地址都是以:http://www.wandouduoduo.com/w... 为例。申请都匹配目录/wddd/ 第一种:加"/"location  /wddd/ {  proxy_pass  http://127.0.0.1:8080/;}测试后果,申请被代理跳转到:http://127.0.0.1:8080/index.html 第二种: 不加"/"location  /wddd/ {       proxy_pass http://127.0.0.1:8080;}测试后果,申请被代理跳转到:http://127.0.0.1:8080/wddd/index.html 第三种: 减少目录加"/"location  /wddd/ {      proxy_pass http://127.0.0.1:8080/sun/;}测试后果,申请被代理跳转到:http://127.0.0.1:8080/sun/index.html 第四种:减少目录不加"/"location  /wddd/ {  proxy_pass http://127.0.0.1:8080/sun;}测试后果,申请被代理跳转到:http://127.0.0.1:8080/sunindex.html 总结 location目录后加"/",只能匹配目录,不加“/”不仅能够匹配目录还对目录进行含糊匹配。而proxy_pass无论加不加“/”,代理跳转地址都间接拼接。为了加深大家印象能够用上面的配置试验测试下: server {     listen       80;     server_name  localhost;  # http://localhost/wddd01/xxx -> http://localhost:8080/wddd01/xxx location /wddd01/ {       proxy_pass http://localhost:8080;  }  # http://localhost/wddd02/xxx -> http://localhost:8080/xxx    location /wddd02/ {        proxy_pass http://localhost:8080/;   }  # http://localhost/wddd03/xxx -> http://localhost:8080/wddd03*/xxx    location /wddd03 {            proxy_pass http://localhost:8080;   } # http://localhost/wddd04/xxx -> http://localhost:8080//xxx,请留神这里的双斜线,好好剖析一下。  location /wddd04 {   proxy_pass http://localhost:8080/;   } # http://localhost/wddd05/xxx -> http://localhost:8080/hahaxxx,请留神这里的haha和xxx之间没有斜杠,剖析一下起因。 location /wddd05/ {     proxy_pass http://localhost:8080/haha;    } # http://localhost/api6/xxx -> http://localhost:8080/haha/xxx    location /wddd06/ {            proxy_pass http://localhost:8080/haha/;   } # http://localhost/wddd07/xxx -> http://localhost:8080/haha/xxx   location /wddd07 {         proxy_pass http://localhost:8080/haha;  }         # http://localhost/wddd08/xxx -> http://localhost:8080/haha//xxx,请留神这里的双斜杠。 location /wddd08 {        proxy_pass http://localhost:8080/haha/;  }}看到这里,是不是感觉有点区别呢??每一种配置都有它不同的意义与区别。太赞了!墙裂举荐这款网页版 Nginx 配置生成器,好用到爆! 如果本文对你有所帮忙,请点个在看与转发分享反对一波。

July 16, 2020 · 1 min · jiezi

科普Nginx-服务相关介绍

什么是Nginx 在此之前也介绍过相干的内容与装置过程,介于理论生产运维环境中应用之多,还是有必要具体理解和了解它的一些弱小的性能与个性。 Nginx作为一个轻量级的HTTP服务器,相比Apache劣势也是比拟显著的,在性能上它占用资源少,能反对更高更多的并发连贯,从而达到进步拜访效率;在性能上它是一款十分优良的代理服务器与负载平衡服务器;在装置配置上它装置,配置都比较简单 Nginx的劣势简介: 常常在运维面试中,面试官会问到,你们用什么HTTP服务器啊?为什么用它?? 1、作为WEB服务器而言,Nginx解决动态文件的效率比拟高 2、作为代理服务器而言,Nginx能够实现无缓存的反向代理减速来进步WEB站点的运行速度,进步用户拜访的体验 3、作为负载平衡服务器而言,反对的利用较多,同时也反对容错性能,自带算法进行负载平衡调度 4、性能方面而言,采纳内核poll模型,反对更多的并发连贯,官网显示最大可反对50000个并发连贯的申请响应,但占用资源很少且十分稳固 Nginx日常配置优化 1、日志切割 因为Nginx没有Apache服务的cronolog日志切割性能,所以须要进行相干优化解决,能够编写脚本来主动切割日志文件 #!/bin/shlogpath="/nginx/logpath"nginxlogs="/var/log/nginx/"mkdir -p  $logpath/$(date +%Y)mv $nginxlogs/access.log $logpath/$(date +%Y)/access_$(date +F).logmv $nginxlogs/error.log $logpath/$(date +%Y)/access_$(date +F).logkill -USR1 `cat /var/log/nginx/nginx.pid` ##通过USR1信号来管制过程,从而从新生成一个新的日志文件 nginx对过程的管制性能十分强,能够通过信号指令来管制过程,罕用信号如下 QUIT 解决完以后申请后敞开过程 HUP 从新加载配置,不会中断用户的拜访申请 USR1 用于切割日志 USR2 用于平滑降级可执行程序 最初将脚本执行命令退出到定时工作来实现主动切割日志 2、nginx中FastCGI参数优化 进步nginx环境下PHP的运行效率,能够将上面的配置退出到主配置文件中 fastcgi_cache_path /application/nginx/fastcgi_cache_levels=1:2 keys_zone=TEST:10m inactive=5m;fastcgi_connect_timeout 300;fastcgi_send_timeout 300;fastcgi_read_timeout 300;fastcgi_buffer_size 64k;fastcgi_buffers 4 64k;fastcgi_busy_buffers_size 128k;fastcgi_cache TEST;fastcgi_cache_valid 200 302 1h;fastcgi_cache_valid 3011d;fastcgi_cache_valid any 1m;##应答缓存工夫 3、nginx的HTTPgzip模块配置 #查看nginx编译参数[root@centos7 ~]# /usr/local/nginx/sbin/nginx -Vnginx version: nginx/1.12.0built by gcc 4.8.5 20150623 (Red Hat 4.8.5-11) (GCC) built with OpenSSL 1.0.1e-fips 11 Feb 2013TLS SNI support enabledconfigure arguments: --with-http_stub_status_module --with-http_gzip_static_module --with-http_ssl_module --prefix=/usr/local/nginx能够看出在编译时已加上此模块,因而只须要在配置文件里进行配置即可 ...

July 9, 2020 · 1 min · jiezi

基于Nginx的分布式限流

# 依据IP地址进行限流# 1) 第一个参数 $binary_remote_addr# binary_目标是放大内存占用,remote_addr示意通过ip地址来限流# 2) 第二个参数 zone=iplimit:20m# iplimit是一块内存区域(记录拜访频率信息),20m示意这块内存区域的大小# 3) 第三个参数 rate=1r/s# 比方rate=100r/m,示意拜访的限流频率limit_req_zone $binary_remote_addr zone=iplimit:20m rate=10r/s;# 依据服务器级别进行限流limit_req_zone $server_name zone=severlimit:10m rate=100r/s;# 基于连接数的配置limit_conn_zone $binary_remote_addr zone=perip:20m;limit_conn_zone $server_name zone=perserver:20m;server { server_name www.nginx-limit.com; location /access-limit/ { proxy_pass http://172.16.50.2:8888/; # 基于IP地址的限度 # 1) 第一个参数 zone=iplimit -> 援用limit_req_zone中的zone变量 # 2) 第二个参数 burst=2 -> 设置一个大小为2的缓冲区域,等大量申请到来 # 申请数量超过限流频率时,将其放入缓冲区域 # 3) 第三个参数 nodelay->缓冲区域满了当前返回503谬误 limit_req zone=iplimit burst=2 nodelay; # 基于服务器级别的限度 # 通常状况下,server级别的限度速率是最大的 limit_req zone=serverlimit burst=100 nodelay; # 每个server最多放弃100个连贯 limit_conn perserver 100; # 每个ip最多放弃1个连贯 limit_conn perip 1; #异常情况返回504(默认返回503) limit_req_status 504; limit_conn_status 504; }# 限度下载速度location /download/ { # 下载完100m后开始限度 limit_rate_after 100m; # 限度下载的速度 limit_rate 256k;}

July 9, 2020 · 1 min · jiezi

nginx-error-open-usrlocalvarrunnginxpid-failed

错误信息服务器重启后启动nginx报错 nginx: [error] open() “/usr/local/var/run/nginx.pid” failed (2: No such file or directory)报错起因:报错的起因是没有nginx文件夹或没有nginx.pid文件,因为每次重新启动,零碎都会主动删除文件 解决办法:在nginx的配置文件nginx.conf中批改nginx.pid的地位,能够将图中红色局部的正文勾销的。 当初pid的地位就变成了nginx目录下的logs目录中 而后在nginx目录下创立logs目录 mkdir /usr/local/nginx/logs在sbin目录下启动nginx ./nginx -c /usr/local/nginx/conf/nginx.conf就会在logs目录下主动生成pid文件

July 9, 2020 · 1 min · jiezi

nginx部署网站

因为前端工作缓和,帮忙部署下前端页面,早就听过nginx的小名,所以初步选定了nginx的计划装置nginx环境:CentOS 7.4注:本文所有命令都是在root用户下执行的,如果是普通用户,请加sudo装置很简略,间接一条命令搞定(不过yum装置的个别都不是最新版本,如果要装最新版本请自行下载安装):yum install -y nginx前提是能够连外网,如果连不了外网,能够用其余形式将安装包下载下载安装,这里就不形容了,网上有很多帖子能够参考。配置nginx如果不晓得nginx的配置文件门路,能够用如下命令查看:nginx -t[root@local]# nginx -tnginx: the configuration file etcnginxnginx.conf syntax is oknginx: configuration file etcnginxnginx.conf test is successful关上配置文件etcnginxnginx.conf批改对应的server模块内容 server { listen 8080 default_server; #listen [::]:80 default_server; server_name _; #root usrsharenginxhtml; root homefrontdist; # Load configuration files for the default server block. include etcnginxdefault.d*.conf; location { root homefrontdist; } error_page 404 404.html; location = 40x.html { } error_page 500 502 503 504 50x.html; location = 50x.html { } }次要批改点:1、端口,这个可选的,默认80,这里改为了80802、ipv6地址监听地址被正文掉了,这个随便,依据需要来3、server_name应该是对应域名,这里没有用到,没有动4、root homefrontdist;这个示意web的拜访目录,须要改为本人的web页面所在目录5、include没有改变,也没钻研其作用是啥6、location中减少了root homefrontdist;7、error_page就用了nginx默认的,没有批改改好之后保留退出启动nginx执行命令[root@local]# nginx而后拜访页面,发现报错:最开始始终认为配置有问题,又搜查了各种配置计划,发现都无法访问,最初找到了一个解决方案:[root@local homefront]# vi etcnginxnginx.conf# For more information on configuration, see:# * Official English Documentation: http:nginx.orgendocs# * Official Russian Documentation: http:nginx.orgrudocsuser nginx;是因为权限问题,我是用root用户启动的nginx,然而配置中的用户默认的是nginx,所以将其user nginx改为root即可。从新加载配置,并启动nginxnginx -s reload功败垂成。不过这都是本地拜访用,没有用平安连贯,如果要用平安连贯,须要配置证书。同时这里应用的是http 1.1,如果要应用http 2.0协定,也须要配置http2.nginx常用命令应用nginx帮忙能够查看[root@local homefront]# nginx -hnginx version: nginx1.16.1Usage: nginx [-?hvVtTq] [-s signal] [-c filename] [-p prefix] [-g directives]Options: -?,-h : this help -v : show version and exit -V : show version and configure options then exit -t : test configuration and exit -T : test configuration, dump it and exit -q : suppress non-error messages during configuration testing -s signal : send signal to a master process: stop, quit, reopen, reload -p prefix : set prefix path (default: usrsharenginx) -c filename : set configuration file (default: etcnginxnginx.conf) -g directives : set global directives out of configuration file罕用的:nginx -t :上文已用过,次要是测试配置文件是否有语法错误nginx -s :次要是向nginx主过程发送信号进行解决,帮忙信息外面也列出了信号名称:stop, quit, reopen, reloadnginx -s stop:强制进行Nginx服务nginx -s quit:优雅地进行Nginx服务(即解决完所有申请后再进行服务)nginx -s reopen:重启Nginxnginx -s reload:从新加载Nginx配置文件,而后以优雅的形式重启Nginx参考https:blog.csdn.netqq_3584... ...

July 8, 2020 · 1 min · jiezi

用5分钟时间说说nginx反向代理和nginx缓存那些事儿

120秒搞懂 nginx 反向代理反向代理,什么是反向代理,那么我们肯定想知道,什么是代理(正向代理) 自由的百科给我说了一堆balabala,不想看了.另送一句mmp, 正向代理,意思是一个位于客户端和原始服务器(origin server)之间的服务器,为了从原始服务器取得内容,客户端向代理发送一个请求并指定目标(原始服务器),然后代理向原始服务器转交请求并将获得的内容返回给客户端。客户端才能使用正向代理。接下来说说我的个人理解,所谓代理,其实就是帮助你访问你原本访问不到的地址,简单点说,你想访问世界上最大的p站,但是你爱国,你访问不了,怎么办,没关系,你开了个代理.让代理去给你请求你想要的东西.就像小时候,金秋时节,别人家的柿子熟了,想吃一个,够不到,怎么办?拿根棍子啊,一棍子下去,咚咚几声,地下就会爬伏几坨黄黄的东西.....这根棍子,就是你开的代理,它帮你打柿子 - 用途:1.访问原来无法访问的资源,如维基百科2.做缓存,减轻原站点的压力.加快访问速度 3.对客户端访问授权,就是先过滤一遍,比如用户权限,用户是不是vip,4.使用代理,对外隐藏用户的信息,就是你访问了p站,但是p站不知道你访问过,因为他认为是你的代理访问的他,但是你觉得真的找不到你吗?就像小时候打架,你跟老师说你没打人,是你手里的棍子打的人,老师会放过你吗?所以,还是本本分分的做人,不要总是干一些蝇营狗苟的勾当. 那么什么是反向代理呢先给一个解释:反向代理服务器位于用户与目标服务器之间,但是对于用户而言,反向代理服务器就相当于目标服务器,即用户直接访问反向代理服务器就可以获得目标服务器的资源。同时,用户不需要知道目标服务器的地址,也无须在用户端作任何设定。反向代理服务器通常可用来作为Web加速,即使用反向代理作为Web服务器的前置机来降低网络和服务器的负载,提高访问效率。---------------姜大庆主编;邓荣副主编.Linux系统与网络管理:中国铁道出版社,2012.05:第282页 小虫解释 想起来钱钟书说过一句话,呃.这个时候会不会觉得小虫也会旁征博引呢.老钱说,假如你吃个鸡蛋觉得味道不错,又何必认识那个下蛋的母鸡呢?这就是反向代理的作用.你去商店买一个鸡蛋,但是你不会去鸡窝看看哪个母鸡下的这个蛋,其中,商店就是一个反向代理. - 反向代理就是你发送一个http请求,请求到达nginx服务器后,nginx通过服务器配置的反向代理,取到结果返给你,但是具体是哪台机器取到的数据,你不知道,- 你不知道,他们为何离去.....此处奉上歌词 后会无期反向代理的作用1.保证内网安全,阻止web攻击,比如,你对外就暴露一个域名 比如 https://m.acurd.com,但是你的w... api.xxx.com wiki.xxx.com2.实现负载均衡,比如 访问 host/api 通过反向代理 就会转发到 api.xxx.com去,访问host/wiki 就会转发到 wiki.xxx.com3.就是下面我们要讲的.利用反代实现页面缓存,减少对服务器端(指被代理的服务器)的请求 nginx反向代理和缓存实现反向代理简单实现我用docker启动了4个nginx服务,具体参考使用docker搭建nginx集群,实现负载均衡172.17.0.2---172.17.0.5 我现在想这样,我访问172.17.0.3/hello的时候,走172.17.0.4 先大概看一下两台机器[root@localhost ~]# curl 172.17.0.38081[root@localhost ~]# curl 172.17.0.3/hello.html<html><head><title>404 Not Found</title></head><body><center><h1>404 Not Found</h1></center><hr><center>nginx/1.19.0</center></body></html>[root@localhost ~]# curl 172.17.0.48082[root@localhost ~]# 配置8081机器,这里提一句,我记得之前代理css的时候出现过问题,就是有的代理走不到下面就被代理了.所以可以把需要代理的放到前面,防止被其他规则代理[root@localhost ~]# cat conf1/conf.d/default.conf server { listen 80; server_name localhost; location /hello.html { proxy_pass http://172.17.0.4; proxy_redirect off; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } location / { root /usr/share/nginx/html; index index.html index.htm; } }[root@localhost ~]# 重启8081服务器[root@localhost ~]# docker exec -it nginx8081 bashroot@ffe603d426f2:/# service nginx restart[....] Restarting nginx: nginx[root@localhost ~]# 看效果[root@localhost ~]# curl 172.17.0.38081[root@localhost ~]# curl 172.17.0.48082[root@localhost ~]# curl 172.17.0.3/hello.htmlhello[root@localhost ~]# curl 172.17.0.4/hello.htmlhello[root@localhost ~]# 一个简单的反代做完了.写到这里我有一个想法,如果代理的是/a/b/c/d/hello,那么实际请求的应该是什么呢?能动手不逼逼修改一下8081的nginx配置文件[root@localhost ~]# cat conf1/conf.d/default.conf server { listen 80; server_name localhost; location /hello.html { proxy_pass http://172.17.0.4; proxy_redirect off; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } location /a/b/c/d/hello { proxy_pass http://172.17.0.4; proxy_redirect off; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } location / { root /usr/share/nginx/html; index index.html index.htm; } }重启服务器,查看docker日志输出[root@localhost ~]# docker ps -aCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES1a4fc8f64447 nginx "/docker-entrypoint.…" 4 hours ago Up 4 hours 0.0.0.0:8083->80/tcp nginx808356dcd4def721 nginx "/docker-entrypoint.…" 4 hours ago Up 4 hours 0.0.0.0:8082->80/tcp nginx8082ffe603d426f2 nginx "/docker-entrypoint.…" 4 hours ago Up 42 minutes 0.0.0.0:8081->80/tcp nginx808172aacbe3c63a nginx "/docker-entrypoint.…" 4 hours ago Up 3 hours 0.0.0.0:8080->80/tcp nginx80802a7229a5ef30 hello-world "/hello" 7 hours ago Exited (0) 7 hours ago dreamy_hamilton54368a05aabf hello-world "/hello" 7 hours ago Exited (0) 7 hours ago mystifying_hawking# 查看被代理的服务器日志[root@localhost ~]# docker logs -f 56dcd4def721172.17.0.1 - - [02/Jul/2020:18:20:34 +0000] "GET /hello.html HTTP/1.1" 200 6 "-" "curl/7.29.0" "-"2020/07/02 18:20:49 [error] 21#21: *32 open() "/usr/share/nginx/html/a/b/c/d/hello" failed (2: No such file or directory), client: 172.17.0.3, server: localhost, request: "GET /a/b/c/d/hello HTTP/1.0", host: "172.17.0.4"说明反代的时候并不会截取你的任何请求,而是完整的把 host后面的东西一股脑全给转了过来但是像下面这种代理,不会全部把参数转过去的,而是只传代理地址后面的 location /static/admin { # return 503; alias /opt/app/public/static/admin; #proxy_pass http://127.0.0.1:8086/static/; }相信你一定可以看明白的 ...

July 6, 2020 · 3 min · jiezi

Nginx学习笔记

一、Nginx简介与安装1、Nginx简介Nginx是一个高性能WEB服务器,除此之外还有Apache、Tomcat、Jetty、IIS等,Nginx相对于其他服务器的优势有以下几点: Nginx与语言无关Nginx可以在Windows、Mac和Linux发行版上部署Nginx事实上已经成为业界使用最多的WEB服务器,Apache由于发展时间长,用户依然众多,但Nginx的增长速度更快2、编译与安装安装环境准备Liux内核要求在2.6以上,Linux2.6以上支持epoll,在2.6之前使用的是select或pool多路复用I/O模型,无法解决高并发问题,可以使用uname -a查看Linux内核版本。gcc编译器pcre库,PCRE是支持正则表达式的函数库,目前使用广泛。zlib库,用于压缩和解压。OpenSSL开发库,用于支持https协议以上五个软件包可以使用如下命令在CentOS上安装: yum -y install make zlib zlib-devel gcc-c++ libtool openssl openssl-devel pcre pcre-devel源码获取nginx下载 wget https://nginx.org/download/nginx-1.19.0.tar.gztar xf nginx-1.19.0.tar.gz简单安装./configuremake & make install执行完成之后nginx就会被安装到/usr/local/nginx 基于参数构建./configure --prefix=/usr/local/nginx --with-http_sub_status_module --with-http_ssl_module --with-debug控制命令# 默认方式启动./sbin/nginx# 指定配置文件启动nginx./sbin/nginx -c nginx.conf# 指定nginx程序目录启动./sbin/nginx -p /usr/local/nginx# 快速停止./sbin/nginx -s stop# 优雅停止./sbin/nginx -s quit# 热装载配置文件./sbin/nginx -s reload# 重新打开日志文件./sbin/nginx -s reopen# 测试配置文件是否有语法错误./sbin/nginx -t nginx.conf二、 Nginx特点nginx启动时,会生成两种类型的进程,一个是Master进程,一个或者多个Worker进程。主进程并不处理网络请求,主要负责调度worker进程(包括加载配置、启动Worker进程和非停机升级);服务器实际处理网络请求及响应的是Worker进程,在类Unix系统上,nginx可以配置多个Worker进程,而每个Worker进程都可以同时处理数以千计的网络请求;模块化设计,nginx的Worker进程包含核心和功能性模块,核心模块负责维持一个run-loop,执行网络请求处理的不同阶段的模块功能,如网络读写,存储读写、内容传递、过滤,以及将请求发往后端服务器等,而其代码的模块化设计,也使得我们可以根据需要对功能模块进行适当的选择和修改,编译成具有特殊功能的服务;事件驱动、异步非阻塞,可以说是nginx能支持高并发、高性能的关键因素,同时也得益于对Linux的kqueue、epoll和事件机制。三、Nginx配置与使用1、配置文件语法与格式例子 worker_processes 1;events { worker_connections 1024;}http { include mime.types; default_type application/octet-stream; sendfile on; keepalive_timeout 65; server { listen 80; server_name www.zjwblog.cn; location / { root html; index index.html index.htm; } location /nginx_status { stub_status on; access_log off; } }}events、http、server、location、upstream为配置项块,而worker_processes、worker_connections、include、listen为配置项。nginx_status属于配置块的特定参数,其中server块嵌套于http块,其可以直接继承访问http块当中的参数。 ...

July 1, 2020 · 2 min · jiezi

太赞了墙裂推荐这款网页版-Nginx-配置生成器好用到爆

之前民工哥也给大家介绍过一款Nginx配置生成器:强大!Nginx 配置在线一键生成“神器”,不太了解的人可以去看一看。 最近民工哥又发现一款好用的网页版开源工具,同样它的功能也是Nginx配置生成器,功能非常强大,方便实用,它是:NginxWebUI。 NginxWebUI介绍 NginxWebUI是一款方便实用的nginx 网页配置工具,可以使用 WebUI 配置 Nginx 的各项功能,包括端口转发,反向代理,ssl 证书配置,负载均衡等,最终生成「nginx.conf」配置文件并覆盖目标配置文件,完成 nginx 的功能配置。 项目地址:https://gitee.com/cym1102/ngi...官方网站:https://nginxwebui.gitee.ioNginxWebUI功能说明该项目是基于springBoot的web系统,数据库使用sqlite,因此服务器上不需要安装任何数据库。本项目可管理多个nginx服务器集群, 随时一键切换到对应服务器上进行nginx配置, 也可以一键将某台服务器配置同步到其他服务器, 方便集群管理。nginx本身功能复杂, 本项目并不能涵盖nginx所有功能, 只能配置常用功能, 更高级的功能配置仍然需要在最终生成的nginx.conf中进行手动编写。部署此项目后, 配置nginx再也不用上网各种搜索, 再也不用手动申请和配置ssl证书, 只需要在本项目中进行增删改查就可方便的配置nginx。NginxWebUI安装它有两种安装方式: 一种是jar包运行方式一种是 Docker运行方式1、jar包运行方式 首先需要安装JDK和Nginx环境,这里不再赘述了,有兴趣的可以看看前面的文章。 下载jar包 wget https://craccd.oss-cn-beijing.aliyuncs.com/nginxWebUI-1.3.5.jar启动程序 nohup java -jar -Xmx64m nginxWebUI-1.3.5.jar --server.port=8080 ----project.home=/home/nginxWebUI/ &启动参数说明: -Xmx64m 最大分配内存数--server.port 占用端口, 默认以8080端口启动--project.home 项目配置文件目录,存放数据库文件,证书文件,日志等, 默认为/home/nginxWebUI/注意命令最后加一个&号, 表示项目后台运行 2、Docker运行方式 本项目制作了docker镜像, 同时包含nginx和nginxWebUI在内, 一体化管理与运行nginx. 首先安装docker运行环境,之前公众号有文章介绍,可以去搜索查阅一下。 下载整体镜像文件: docker pull registry.cn-hangzhou.aliyuncs.com/cym1102/nginxwebui:1.3.5启动容器: docker run -itd -v /home/nginxWebUI:/home/nginxWebUI -e BOOT_OPTIONS="--变量名=变量值 --变量名2=变量值2" --privileged=true --net=host registry.cn-hangzhou.aliyuncs.com/cym1102/nginxwebui:1.3.5 /bin/bash参数说明: 启动容器时请使用--net=host参数, 直接映射本机端口, 因为内部nginx可能使用任意一个端口, 所以必须映射本机所有端口.容器需要映射路径/home/nginxWebUI:/home/nginxWebUI, 此路径下存放项目所有数据文件, 包括数据库, nginx配置文件, 日志, 证书等, 升级镜像时, 此目录可保证项目数据不丢失. 请注意备份.-e BOOT_OPTIONS 参数可填充java启动参数, jar安装教程中的参数均可使用, 可以靠此项参数修改端口号等日志默认存放在/home/nginxWebUI/log/nginxWebUI.log安装完成,启动之后,就要以通过WEB网页来访问这个项目了。 ...

July 1, 2020 · 1 min · jiezi

小白建站系列之宝塔面板安装WordPress个人网站图文教程

下面稍微介绍一下如何使用阿里云服务器安装宝塔面板。 一、准备阿里云的云服务器,即 阿里云ECS,默认的用户名 root,密码的话可以修改。 远程连接云服务器使用 ssh 软件工具,使用的是公网ip。 注意事项:出于性能考虑,服务器的操作系统一定要选Linux版本(centos或者ubuntu),不要选Window。 主要步骤:拥有一台云服务器》ssh工具连接云服务器》安装宝塔面板》配置云服务器安全组(放行端口)》宝塔面板在线访问成功二、安装面板1、使用ssh工具连接云服务器windows下可以使用XShell,macOs的可以使用终端。 因为SSH工具有很多种,找到自己用的舒服的工具就可以,不用纠结使用哪一种。我自己是用的FinalShell这一款SSH工具来进行Linux远程连接的,如何认为不安全的话,也可以继续用Xshell,只是需要激活码,如下图 2、输入宝塔面板安装命令温馨提示:宝塔面板最近升级到了7.0版本,Centos7以上的系统建议安装宝塔面板最新版:https://www.bt.cn/bbs/thread-19376-1-1.html(宝塔面板7.x版本,点击查看安装命令)https://www.bt.cn/bbs/thread-30562-1-1.html(宝塔面板6.x版本,点击查看安装命令)安装方法这里也有介绍(以宝塔面板5.x版本举例):http://www.bt.cn/bbs/thread-1... 以下安装命令是宝塔面板5.x版本的,请注意。如果安装出错了,就去安装宝塔面板7.x版本Centos安装脚本: yum install -y wget && wget -O install.sh http://download.bt.cn/install... && sh install.shUbuntu/Deepin安装脚本: wget -O install.sh http://download.bt.cn/install... && sudo bash install.shDebian安装脚本: wget -O install.sh http://download.bt.cn/install... && bash install.shFedora安装脚本: wget -O install.sh http://download.bt.cn/install... && bash install.sh前两者偏多。根据操作系统输入不同的安装命令,然后回车 此间不需要任何操作。 3、宝塔面板安装成功稍等一分钟(有时候网速差可能久一点),然后不要关闭窗口 最终可以看到如下界面 这里会显示宝塔后台地址和账号密码,可以手动复制到记事本暂时存起来。 三、配置安全组如果你已经会设置安全组的话,就可以省略这一步,直接浏览器访问宝塔面板 访问地址:http://云服务器公网IP地址:8888/上面的黄色的字也说了,如果不能访问面板,请在安全组中放行端口。 因为刚装的系统,自然也没有放行8888端口,面板后台无法打开 下面我们添加安全组 1、进入云服务器管理后台进入服务器(实例)主页,点击右边的查看更多,点击安全组配置。 2、然后可以看到一条安全组点击配置规则(如果没有就新建一条安全组) 3、点击快速创建规则 4、可以看到如下页面 常用端口可以勾选,相当于多选。也可以自定义端口,比如我们要将8888和888添加进去。 授权对象像之前已经填的 0.0.0.0/0 一样。 ...

June 28, 2020 · 1 min · jiezi

运维监控工具排名前10名介绍

Zabbix官方网站:https://www.zabbix.com/ 推荐星级:★★★★★Zabbix是一个基于WEB界面的提供分布式系统监控以及网络监控功能的企业级开源运维平台,也是目前国内互联网用户中使用最广的监控软件,云智慧遇到的85%以上用户在使用Zabbix做监控解决方案。   WGCLOUD官方网站:http://www.wgstart.com/ 推荐星级:★★★★★国人开源的新锐监控工具,轻量高并发,一出来就火爆异常。server采用springboot微服务架构开发,跨平台,单节点可支持500+主机监控。核心监控组件:服务器集群监控,ES集群监控,CPU监控,内存监控,数据监控(mysql,oracle,pg等),服务心跳检测,应用进程管理,磁盘IO监控,系统负载监控,监控告警信息推送。 优点: 中文开源软件,界面很绚丽很友好,对业务数据变化感知很好,可以sql统计数据变化。缺点:目前最新版本不开源了,但依然免费,开源版本还在继续维护中,可以理解作者也要吃饭哈。但是免费版对个人和小团队足够用了,不用担心。 Nagios官方网站:https://www.nagios.org/ 推荐星级:★★★★☆ Nagios是一款开源的企业级监控系统,能够实现对系统CPU、磁盘、网络等方面参数的基本系统监控,以及 SMTP,POP3,HTTP,NNTP等各种基本的服务类型。另外通过安装插件和编写监控脚本,用户可以实现应用监控,并针对大量的监控主机和多个对象 部署层次化监控架构。 Nagios最大的特点是其强大的管理中心,尽管其功能是监控服务和主机的,但Nagios自身并不包括这部分功能代码,所有的监控、告警功能都是由相关插件完成的。 用户群:适合复杂IT环境的企业  Ganglia官方网站:http://ganglia.info/ 推荐星级:★★★★☆ Ganglia是加州大学伯克利分校发起的一个开源集群监控项目,设计之初是用于监控数以千计的网络节点。Ganglia是一个跨平台可扩展的,高性能计算系统下的分布式监控系统。它已被广泛移植到各种操作系统和处理器架构上。 image_1bnnji6etu471k52m9he72ld513.png-726.2kB 用户群:适用于大型服务器集群用户。  Grafana推荐星级:★★☆☆☆官方网站:http://grafana.org/ Grafana可以用在任何需要数据可视化的地方,如果有一天老板需要你做一份漂亮的业务数据图表,你无需头疼用什么绘图库去开发,你要做的仅仅是将业务数据稍作加工存入Grafana支持的DataSource,点几下鼠标即可配制出一份完美的数据图表。 因为这款工具只可以绘图,我们可以通过influxdb监控,Prometheus采集的主机信息!  Zenoss推荐星级:★★★★☆ Zenoss Core是Zenoss的开源版本,其商用版本为ZenossEnterprise。作为企业级智能监控软件,Zenoss Core允许IT管理员依靠单一的WEB控制台来监控网络架构的状态和健康度。Zenoss Core的强大能力来自于深入的列表与配置管理数据库,以发现和管理公司IT环境的各类资产。Zenoss同时提供与CMDB关联的事件和错误管理系统, 以协助提高各类事件和提醒的管理效率。  Open-falcon推荐星级:★★★☆☆ Open-falcon是小米运维团队从互联网公司的需求出发,根据多年的运维经验,结合SRE、SA、DEVS的使用经验和反馈,开发的一套面向互联网的企业级开源监控产品。   Cacti推荐星级:★★★☆☆ 官方网站:http://www.cacti.net 提示: 近几年cacti和nagios已经基本被zabbix代替   天兔开源监控(只适用于mysql、redis、oracle)推荐星级:★★☆☆☆ 官方网站:http://www.lepus.cc/ 简洁、直观、强大的开源数据库监控系统,MySQL/Oracle/MongoDB/Redis一站式性能监控,让数据库监控更简单 优点: 中文开源软件,里面监控mysql和redis可以精确到sql语句缺点: 因为只有监控数据库和非关系数据库,监控项不能统一,不能结合其他监控平台————————————————版权声明:本文为CSDN博主「tianshiyeben」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。原文链接:https://blog.csdn.net/tianshi...

June 24, 2020 · 1 min · jiezi

葵花宝典一文搞定-Nginx-限流配置

_来源:https://www.cnblogs.com/bigli... 作者:biglittleant_1、限流算法令牌桶算法 令牌桶算法 算法思想是: 令牌以固定速率产生,并缓存到令牌桶中;令牌桶放满时,多余的令牌被丢弃;请求要消耗等比例的令牌才能被处理;令牌不够时,请求被缓存。漏桶算法 漏桶算法 算法思想是: 水(请求)从上方倒入水桶,从水桶下方流出(被处理);来不及流出的水存在水桶中(缓冲),以固定速率流出;水桶满后水溢出(丢弃)。这个算法的核心是:缓存请求、匀速处理、多余的请求直接丢弃。  相比漏桶算法,令牌桶算法不同之处在于它不但有一只“桶”,还有个队列,这个桶是用来存放令牌的,队列才是用来存放请求的。从作用上来说,漏桶和令牌桶算法最明显的区别就是是否允许突发流量(burst)的处理,漏桶算法能够强行限制数据的实时传输(处理)速率,对突发流量不做额外处理;而令牌桶算法能够在限制数据的平均传输速率的同时允许某种程度的突发传输。 Nginx按请求速率限速模块使用的是漏桶算法,即能够强行保证请求的实时处理速度不会超过设置的阈值。 Nginx官方版本限制IP的连接和并发分别有两个模块: limit_req_zone 用来限制单位时间内的请求数,即速率限制,采用的漏桶算法 "leaky bucket"。limit_req_conn 用来限制同一时间连接数,即并发限制。limit_req_zone 参数配置    Syntax:    limit_req zone=name [burst=number] [nodelay];     Default:    —     Context:    http, server, locationlimit_req_zone $binary_remote_addr zone=one:10m rate=1r/s; 第一个参数:$binary_remote_addr 表示通过remote_addr这个标识来做限制,“binary_”的目的是缩写内存占用量,是限制同一客户端ip地址。第二个参数:zone=one:10m表示生成一个大小为10M,名字为one的内存区域,用来存储访问的频次信息。第三个参数:rate=1r/s表示允许相同标识的客户端的访问频次,这里限制的是每秒1次,还可以有比如30r/m的。limit_req zone=one burst=5 nodelay; 第一个参数:zone=one 设置使用哪个配置区域来做限制,与上面limit_req_zone 里的name对应。第二个参数:burst=5,重点说明一下这个配置,burst爆发的意思,这个配置的意思是设置一个大小为5的缓冲区当有大量请求(爆发)过来时,超过了访问频次限制的请求可以先放到这个缓冲区内。第三个参数:nodelay,如果设置,超过访问频次而且缓冲区也满了的时候就会直接返回503,如果没有设置,则所有请求会等待排队。例子:     http {         limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s; server {             location /search/ {             limit_req zone=one burst=5 nodelay;        }    }        下面配置可以限制特定UA(比如搜索引擎)的访问: limit_req_zone $anti_spider zone=one:10m rate=10r/s; limit_req zone=one burst=100 nodelay; if ($http_user_agent ~* "googlebot|bingbot|Feedfetcher-Google") { set $anti_spider $http_user_agent; }其他参数 Syntax:    limit_req_log_level info | notice | warn | error;     Default:         limit_req_log_level error;     Context:    http, server, location当服务器由于limit被限速或缓存时,配置写入日志。延迟的记录比拒绝的记录低一个级别。例子:limit_req_log_level notice 延迟的的基本是info。     Syntax:    limit_req_status code;     Default:        limit_req_status 503;     Context:    http, server, location设置拒绝请求的返回值。值只能设置 400 到 599 之间。 ...

June 23, 2020 · 1 min · jiezi

Nginx-如何自定义变量

之前的两篇文章 Nginx 变量介绍以及利用 Nginx 变量做防盗链 讲的是 Nginx 有哪些变量以及一个常见的应用。那么如此灵活的 Nginx 怎么能不支持自定义变量呢,今天的文章就来说一下自定义变量的几个模块以及 Nginx 的 keepalive 特性。 通过映射新变量提供更多的可能性:map 模块功能:基于已有变量,使用类似 switch {case: … default: …} 的语法创建新变量,为其他基于变量值实现功能的模块提供更多的可能性模块:ngx_http_map_module 默认编译进 Nginx,通过 --without-http_map_module 禁用指令Syntax: map string $variable { ... }Default: —Context: httpSyntax: map_hash_bucket_size size;Default: map_hash_bucket_size 32|64|128; Context: httpSyntax: map_hash_max_size size;Default: map_hash_max_size 2048; Context: http我们主要看一下 map string $variable { ... } 这个指令。所谓类似 switch case 的语法是指,string 的值可以有多个,可以根据 string 值的不同,来给 $variable 赋不同的值。 规则已有变量:string 需要是已有的变量,可以分为下面这三种情况 字符串一个或者多个变量变量与字符串的组合case 规则:{...} 内的匹配规则需要遵循以下规则,尤其是要注意当使用 hostnames 指令时,与 server name 的匹配规则是一致的,可以看之前的文章 Nginx 的配置指令 ...

June 21, 2020 · 3 min · jiezi

NGINX-之父再次被起诉索赔金额升至75亿美元

技术编辑:宗恩丨发自 SiFou Office SegmentFault 思否报道丨公众号:SegmentFault 去年12月,俄罗斯警方搜查了商业服务器公司 NGINX,并当场带走了两位联合创始人,其中一位是 NGINX 之父 Igor Sysoev。两人被捕的原因是前东家 Rambler 集团提出了侵权指控。 不过在被捕后因为证据不足两位创始人很快被释放,但在被捕期间两人受到了警方「严厉」的审讯。事后他们评论称「此次事件是Rambler领导层的一次勒索」。 此后 Rambler 方面表示将放弃对 NGINX 公司的刑事诉讼,但后续将继续在民事法庭上对 NGINX 源代码提出关于所有权的要求。 事件起因是 Igor Sysoev 作为员工供职于 Rambler 期间,利用业余时间开发了开源 Web 服务器软件 NGINX 。2011年,Sysoev 及其合作伙伴离开莫斯科前往旧金山、筹资创办了商业公司 NGINX,并最终以 6.7 亿美元的价格出售给了 F5 Networks。 Rambler 果然说到做到,当地时间 2020 年 6 月 8 日 Rambler 再次提起诉讼,这次的理由是 「NGINX 的开发耗用了 Rambler 的资源,使用了 Rambler 的设备、基础设施、资源和人才。其中包括作为『免费软件测试台』而处理的大规模互联网流量。」并且在进行开发的多年期间,NGINX 的几位开发者刻意隐藏开发 NGINX 的信息,以免被 Rambler 的高级管理层发现 Rambler 这次不仅起诉 Igor Sysoev、前首席技术官 Maxim Konavalov ,还起诉 F5 Networks 以及为他们俩出资开公司的两家风险投资公司 Runa Capital 和 E.venture Capital Partners,并声称他们共同密谋窃取其知识产权,他们应该赔偿自己 7.5 亿美元的赔偿。 ...

June 20, 2020 · 1 min · jiezi

Nginx-配置太复杂这个开源项目让你在Web中就搞定

项目名称:nginxWebUI 项目作者:陈钇蒙 开源许可协议:MulanPSL-2.0 项目地址:https://gitee.com/cym1102/nginxWebUI 功能说明本项目可以使用WebUI配置nginx的各项功能,包括http协议转发,tcp协议转发,反向代理, 负载均衡,ssl证书自动申请、续签、配置等,最终生成nginx.conf文件并覆盖nginx的默认配置文件, 完成nginx的最终功能配置。 本项目可管理多个nginx服务器集群,随时一键切换到对应服务器上进行nginx配置,也可以一键将某台服务器配置同步到其他服务器,方便集群管理。 nginx本身功能复杂,本项目并不能涵盖nginx所有功能,只能配置常用功能,更高级的功能配置仍然需要在最终生成的nginx.conf中进行手动编写。 部署此项目后, 配置nginx再也不用上网各种搜索,再也不用手动申请和配置ssl证书,只需要在本项目中进行增删改查就可方便的配置nginx。 技术说明本项目是基于springBoot的web系统,数据库使用sqlite,因此服务器上不需要安装任何数据库。 使用说明 登录页面, 第一次打开会要求初始化管理员账号。 进入系统后, 可在管理员管理里面添加修改管理员账号。 在http参数配置中可以配置nginx的http项目,进行http转发。 在TCP参数配置中可以配置nginx的steam项目参数,进行tcp转发。 在反向代理中可配置nginx的反向代理即server项功能,可开启ssl功能,可以直接从网页上上传pem文件和key文件,或者使用系统内申请的证书,可以直接开启http转跳https功能,也可开启http2协议。 在负载均衡中可配置nginx的负载均衡即upstream项功能,,在反向代理管理中可选择代理目标为配置好的负载均衡。 在html静态文件上传中可直接上传html压缩包到指定路径,上传后可直接在反向代理中使用,省去在Linux中上传html文件的步骤。 在证书管理中可添加证书,并进行签发和续签,开启定时续签后,系统会自动续签即将过期的证书。 最终生成conf文件,可在此进行进一步手动修改,确认修改无误后,可覆盖本机conf文件,并进行校验和重启,可以选择生成单一nginx.conf文件还是按域名将各个配置文件分开放在conf.d下。 log管理,在http配置中如果开启了log监控的话,会每天在这里生成日志分析报告。 远程服务器管理,如果有多台nginx服务器,可以都部署上nginxWebUI,然后登录其中一台, 在远程管理中添加其他服务器的ip和用户名密码,就可以在一台机器上管理所有的nginx服务器了。 此外,项目还提供了一键同步功能, 可以将某一台服务器的数据配置和证书文件同步到其他服务器中。 如果你想要了解更详细的安装步骤和使用方法,那就点击后面的链接去项目主页看看吧:https://gitee.com/cym1102/nginxWebUI

June 17, 2020 · 1 min · jiezi

Nginx16连环问你被问住了吗

作为一个后端程序员,Nginx也是必备技能之一哦,作为一个web服务器,Nginx的性能方面是很不错的。本文总结或16个知识点,或者面试题分享给大家,后续还会继续更新⛽️。1.什么是nginx?Nginx是一个高性能的HTTP和反向代理服务器。同时也是一个 IMAP/POP3/SMTP 代理服务器。 官方网站:http://nginx.org。 2.nginx主要特征?处理静态文件,索引文件以及自动索引;打开文件描述符缓冲. 无缓存的反向代理加速,简单的负载均衡和容错. FastCGI,简单的负载均衡和容错.模块化的结构。包括 gzipping, byte ranges, chunked responses,以及 SSI-filter 等filter。如果由 FastCGI 或其它代理服务器处理单页中存在的多个 SSI,则这项处理可以并行 运行,而不需要相互等待。 支持 SSL 和 TLSSNI. Nginx 它支持内核 Poll 模型,能经受高负载的考验,有报告表明能支持高达 50,000 个并发连接数。 Nginx 具有很高的稳定性。 例如当前 apache 一旦上到 200 个以上进程,web 响应速度就明显非常缓慢了。而 Nginx 采取了分阶段资源分配技术,使得它的 CPU 与内存占用率非常低。nginx 官方表示保持 10,000 个没有活动的连接,它只占 2.5M 内存,所以类似 DOS 这样的攻击对 nginx 来说基本上是毫无用处的。 Nginx 支持热部署。它的启动特别容易, 并且几乎可以做到 7*24 不间断运行,即使运 行数个月也不需要重新启动。对软件版本进行进行热升级。 Nginx 采用 master-slave 模型,能够充分利用 SMP 的优势,且能够减少工作进程在磁 盘 I/O 的阻塞延迟。当采用 select()/poll()调用时,还可以限制每个进程的连接数。 Nginx 代码质量非常高,代码很规范,手法成熟, 模块扩展也很容易。特别值得一提的是强大的 Upstream 与 Filter 链。 ...

June 8, 2020 · 2 min · jiezi

nginx安装及部署

nginx安装1.前置安装 sudo yum install yum-utils2.在服务器上根目录创建一个/etc/yum.repos.d/nginx.repo文件,编辑如下: [nginx-stable] name=nginx stable repo baseurl=http://nginx.org/packages/centos/$releasever/$basearch/ gpgcheck=1 enabled=1 gpgkey=https://nginx.org/keys/nginx_signing.key module_hotfixes=true [nginx-mainline] name=nginx mainline repo baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/ gpgcheck=1 enabled=0 gpgkey=https://nginx.org/keys/nginx_signing.key module_hotfixes=true3. sudo yum install nginx这样我们就完成了nginx的安装,这三步官网要求的,没有为什么;以这样的方式我们安装nginx的配置在/etc/nginx/default.conf中配置 2.nginx配置我们刚生成的nginx默认配置如下 user nginx; //默认用户worker_processes 1;//cpu内核error_log /var/log/nginx/error.log warn;//打印错误日志路径pid /var/run/nginx.pid;//nginx运行启动后就会生成这个标示文件,记录 nginx主进程的 ID 号。events {//设置最大连接数 worker_connections 1024;}http { include /etc/nginx/mime.types; //设置各种类型 default_type application/octet-stream; log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"';//打印日志的方式,$符标识变量 access_log /var/log/nginx/access.log main;//打印访问日志 sendfile on;//指定是否使用sendfile系统调用来传输文件。 sendfile系统调用在两个文件描述符之间直接传递数据(完全在内核中操作),从而避免了数据在内核缓冲区和用户缓冲区之间的拷贝,操作效率很高,被称之为零拷贝 keepalive_timeout 65;//默认连接时间 include /etc/nginx/conf.d/*.conf;//默认配置都包含在.conf文件中}上面的最后一行我们也清楚了,那么我们看一看默认配置的详细注解: ...

June 8, 2020 · 1 min · jiezi

Nginx学习笔记二反向代理

反向代理实例一 实现效果:使用 nginx 反向代理,访问 www.123.com 直接跳转到127.0.0.1:8080 1.分析2.修改host3.修改ngixn配置文件 反向代理实例二 使用 nginx 反向代理,根据访问的路径跳转到不同端口的服务中 nginx 监听端口为 9001访问 http://192.168.17.129:9001/edu/ 直接跳转到 127.0.0.1:8080 访问 http:// 192.168.17.129:9001/vod/直接跳转到127.0.0.1:8081 修改ngixn配置文件

June 6, 2020 · 1 min · jiezi

使用Nginx防止IP地址被恶意解析

使用Nginx的目的使用阿里云ECS云服务器,首先聊聊笔者使用Nginx的背景。 初始化ECS后会生成一个公网IP,默认访问IP地址自动访问80端口,此时通过ip地址可直接访问启动在80端口的服务。 如再把域名解析到当前ip,即可通过域名直接访问80端口的服务。 然后,出现了一个问题:任何人都可以将域名解析到ip地址,也就是说,通过其他域名也可以访问到自己ECS上的服务。至于目的,这种攻击手段未免太光明正大了,应该是想养域名然后售卖(猜测,脑洞够大的大大交流一下)。 避免这种攻击的方式有很多种,参考网上的答案,配置Nginx是最方便快捷的。 大致思路如下,web端服务以非80端口启动(无法直接通过IP地址访问到),Nginx配置一层正向代理,将域名转发到域名+端口。 结果:解析后使用自己的域名可以直接访问,本质上是转发到了ip地址+端口。而其他域名没有配置端口转发,所以会被拦截下来。 使用Nginx的场景有很多,反向代理,负载均衡等等,防止恶意解析只是其中一种。 也许未来或扩展更多Nginx相关的技术经验,但是代码只是一种工具,技术只有在解决了真正的问题才会产生价值,不然就如同纸上谈兵,毫无意义。 之前看到过一篇文章,讲的是两个开发者在讨论技术选择,其中一个人选择了冷门的Lua,另一个人表示不解,为什么不选择热门的技术,更好的性能,更好的开发体验。然而,她的回答是:能解决我们的问题就行了。 我陷入了深思,2019掀起的微服务架构浪潮我也跟了一把,学习了很多新的技术,名词,感觉盆满钵满。然而很难有机会将其运用到实际的项目开发中,高并发,微服务到底是一种技术,还是一种炫耀的资本,解决的是项目中的实际问题还是就业问题。学习无罪,但在学习前我会思考,我会使用它,还是被它所束缚。 就哔哔这么多,以下是在Linux环境下Nginx的常用命令和我复制下来的配置文件(nginx.conf) 常用命令列表yum install nginx //安装nginx(centos)//开机自启systemctl enable nginxsystemctl disable nginx//查看nginx状态systemctl status nginx//启动,停止,重启systemctl start nginxsystemctl stop nginxsystemctl restart nginx//重新加载配置systemctl reload nginx//配置文件的默认位置/etc/nginx 主配置文件nginx.conf防止恶意解析配置 server { listen 80 default_server; server_name _; access_log off; return 444; }# For more information on configuration, see:# * Official English Documentation: http://nginx.org/en/docs/# * Official Russian Documentation: http://nginx.org/ru/docs/user nginx;worker_processes auto;error_log /var/log/nginx/error.log;pid /run/nginx.pid;# Load dynamic modules. See /usr/share/doc/nginx/README.dynamic.include /usr/share/nginx/modules/*.conf;events { worker_connections 1024;}http { log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; access_log /var/log/nginx/access.log main; sendfile on; tcp_nopush on; tcp_nodelay on; keepalive_timeout 65; types_hash_max_size 2048; include /etc/nginx/mime.types; default_type application/octet-stream; # Load modular configuration files from the /etc/nginx/conf.d directory. # See http://nginx.org/en/docs/ngx_core_module.html#include # for more information. include /etc/nginx/conf.d/*.conf; server { listen 80 default_server; server_name _; access_log off; return 444; } server { listen 80; server_name www.zkrun.top; location / { proxy_pass http://www.zkrun.top:8080; } error_page 404 /404.html; location = /40x.html { } error_page 500 502 503 504 /50x.html; location = /50x.html { } }# Settings for a TLS enabled server.## server {# listen 443 ssl http2 default_server;# listen [::]:443 ssl http2 default_server;# server_name _;# root /usr/share/nginx/html;## ssl_certificate "/etc/pki/nginx/server.crt";# ssl_certificate_key "/etc/pki/nginx/private/server.key";# ssl_session_cache shared:SSL:1m;# ssl_session_timeout 10m;# ssl_ciphers HIGH:!aNULL:!MD5;# ssl_prefer_server_ciphers on;## # Load configuration files for the default server block.# include /etc/nginx/default.d/*.conf;## location / {# }## error_page 404 /404.html;# location = /40x.html {# }## error_page 500 502 503 504 /50x.html;# location = /50x.html {# }# }}

June 5, 2020 · 2 min · jiezi

nginx-nginx安装及常用配置详解

nginx | nginx安装及常用配置详解 Nginx("engine x")是一款是由俄罗斯的程序设计师Igor Sysoev所开发高性能的 Web和 反向代理 服务器,也是一个 IMAP/POP3/SMTP 代理服务器。 在高连接并发的情况下,Nginx是Apache服务器不错的替代品。 Nginx 安装系统平台:CentOS release 6.6 (Final) 64位。 一、安装编译工具及库文件yum -y install make zlib zlib-devel gcc-c++ libtool openssl openssl-devel二、首先要安装 PCREPCRE 作用是让 Nginx 支持 Rewrite 功能。 1、下载 PCRE 安装包,下载地址: http://downloads.sourceforge.... [root@bogon src]# cd /usr/local/src/[root@bogon src]# wget http://downloads.sourceforge.net/project/pcre/pcre/8.35/pcre-8.35.tar.gz 2、解压安装包: [root@bogon src]# tar zxvf pcre-8.35.tar.gz3、进入安装包目录 [root@bogon src]# cd pcre-8.354、编译安装 [root@bogon pcre-8.35]# ./configure[root@bogon pcre-8.35]# make && make install5、查看pcre版本 [root@bogon pcre-8.35]# pcre-config --version ...

June 4, 2020 · 3 min · jiezi

Nginx状态监控及日志分析

【转载请注明出处】:https://segmentfault.com/a/1190000022808115 1、Nginx状态监控Nginx提供了一个内置的状态信息监控页面可用于监控Nginx的整体访问情况,这个功能由ngx_http_stub_status_module模块进行实现。使用nginx -V 2>&1 | grep -o with-http_stub_status_module命令检测当前Nginx是否有status功能,如果输出ngx_http_stub_status_module则说明是有的,如果没有可以在编译时加上此模块。默认情况下,status是关闭的,我们需要开启,并指定uri来访问数据。 server { listen 80; server_name default_server; location /status { stub_status on; allow 114.247.125.227; }}allow配置只允许指定的Ip才能访问nginx status功能,去掉就是不限制。重启Nginx之后,浏览器访问http://{IP}/status查看状态监控信息 Active connections:当前的客户端活动连接数(包含正在等待的客户端连接),相当于TCP连接状态处于Established和SYN_ACKaccepts: 已接受的客户端连接总数,即已被worker进程接收的连接handled: 已被处理的连接总数requests: 客户端的http请求总数Reading: 当前正在读取的http请求数(读取到http请求首部)Writing: 当前准备响应的连接数(写入到http响应首部)Waiting: 当前处于等待的空闲客户端请求数, 等待的时间为Reading和Writing之间的间隔采集到Nginx数据之后就可以用监控工具给监控起来了。 2、日志分析Nginx默认的日志格式配置可以在/etc/nginx/nginx.conf中找到 log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for" $request_time $upstream_response_time';打印的日志实例 39.105.66.117 - mp [11/Sep/2019:19:03:01 +0800] "POST /salesplatform-gateway/users HTTP/1.1" 200 575 "-" "Apache-HttpClient/4.5.5 (Java/1.8.0_161)" "-" 0.040 0.04039.105.66.117 - mp [11/Sep/2019:19:03:08 +0800] "POST /salesplatform-gateway/users HTTP/1.1" 200 575 "-" "Apache-HttpClient/4.5.5 (Java/1.8.0_161)" "-" 0.008 0.008$remote_addr: 客户端的ip地址$remote_user: 用于记录远程客户端的用户名称$time_local: 用于记录访问时间和时区$request: 用于记录请求的url以及请求方法$status: 响应状态码$body_bytes_sent: 给客户端发送的文件主体内容字节数$http_referer: 可以记录用户是从哪个链接访问过来的$http_user_agent: 用户所使用的浏览器信息$http_x_forwarded_for: 可以记录客户端IP,通过代理服务器来记录客户端的ip地址**$request_time**: 指的是从接受用户请求的第一个字节到发送完响应数据的时间,即\$request_time包括接收客户端请求数据的时间、后端程序响应的时间、发送响应数据给客户端的时间$upstream_response_time: 用于接收来自上游服务器的响应的时间常用分析命令1、根据访问IP统计UV ...

June 1, 2020 · 2 min · jiezi

nginx学习01安装

nginx安装: stable: [nginx-stable] name=nginx stable repo baseurl=http://nginx.org/packages/cen...$releasever/$basearch/ gpgcheck=1 enabled=1 gpgkey=https://nginx.org/keys/nginx_... module_hotfixes=truecd /etc/yum.repos.d/vim nginx.repo拷贝上面内容:$releasever->7检查: yum list|grep nginxyum install nginx[root@niewj yum.repos.d]# nginx -v nginx version: nginx/1.18.0[root@niewj yum.repos.d]# ng ngettext nginx nginx-debug[root@niewj yum.repos.d]# ps -ef|grep nginx root 8133 1 0 13:13 ? 00:00:00 nginx: master process nginx nginx 8134 8133 0 13:13 ? 00:00:00 nginx: worker process root 8143 7996 0 13:14 pts/0 00:00:00 grep --color=auto nginx[root@niewj yum.repos.d]# nginx -Vnginx version: nginx/1.18.0built by gcc 4.8.5 20150623 (Red Hat 4.8.5-39) (GCC) built with OpenSSL 1.0.2k-fips 26 Jan 2017TLS SNI support enabledconfigure arguments: --prefix=/etc/nginx --sbin-path=/usr/sbin/nginx --modules-path=/usr/lib64/nginx/modules --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx.pid --lock-path=/var/run/nginx.lock --http-client-body-temp-path=/var/cache/nginx/client_temp --http-proxy-temp-path=/var/cache/nginx/proxy_temp --http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp --http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp --http-scgi-temp-path=/var/cache/nginx/scgi_temp --user=nginx --group=nginx --with-compat --with-file-aio --with-threads --with-http_addition_module --with-http_auth_request_module --with-http_dav_module --with-http_flv_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_mp4_module --with-http_random_index_module --with-http_realip_module --with-http_secure_link_module --with-http_slice_module --with-http_ssl_module --with-http_stub_status_module --with-http_sub_module --with-http_v2_module --with-mail --with-mail_ssl_module --with-stream --with-stream_realip_module --with-stream_ssl_module --with-stream_ssl_preread_module --with-cc-opt='-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic -fPIC' --with-ld-opt='-Wl,-z,relro -Wl,-z,now -pie' ...

June 1, 2020 · 1 min · jiezi

修改nginx默认指向目录

环境是ubuntu16nginx是1.10.3这里我先修改的是nginx.conf这个文件,但是没效果 于是我又去看了下配置,发现修改 /deafult好像有默认目录这个配合,于是修改,重启,发现成功了。

May 29, 2020 · 1 min · jiezi

php编译安装报错make-sapicliphp-Error-1-解决办法

php编译安装报错:make: *** [sapi/cli/php] Error 1 时怎么办?ext/iconv/.libs/iconv.o: In function `php_iconv_stream_filter_ctor’: /ext/iconv/iconv.c:2491: undefined reference to `libiconv_open’ collect2: ld returned 1 exit status make: *** [sapi/cli/php] Error 1 解决方法:[17:51:36 root@a7 ~]#vim Makefile 添加:-liconv 更多文章详见:http://www.magedu.com/xwzx/li...

May 28, 2020 · 1 min · jiezi

Mac重启nginx报错-failed-2-No-such-file-or-directory

由于重启nginx导致nginx.pid文件丢失,我上网搜了很多解决方法,但实际上只有第一步用到了,并且千万要注意一点每个人用的系统都不一样,nginx的安装路径也会有些区别,就比如nginx.conf这个文件的存放路径网上搜出来的是/usr/local/nginx/nginx.conf,但是我的是/usr/local/etc/nginx/nginx.conf。我的解决方法:第一步都是将nginx.conf文件里的#pid logs/nginx.pid这句话中的“#”删掉;第二步是在报错的目录下(/usr/local/Cellar/nginx/1.17.6/)新建logs文件夹,一开始我不知道logs文件建在哪个目录下,只是根据网上解决方法里贴出来的图片将logs文件夹与nginx.conf文件平级:/usr/local/etc/nginx/logs,最后才发现不应该建在这个路径下,而是将log新建在报错提示的路径下;最后一步就在logs文件夹下新建nginx.pid文件,执行nginx -s reload,你就会发现nginx命令能用了,也不会再报错了。网上搜出来的方法都是先nginx -s reload,接着执行nginx -c /usr/local/etc/nginx/nginx.conf等等各种各样的生成nginx.pid文件的命令,但是我nginx这个命令都用不了,更别说执行nginx -s reload和nginx -c /usr/local/etc/nginx/nginx.conf了,只会报没有发现这个命令,无奈之下我只能在logs目录下输入命令touch nginx.pid,然后执行nginx -s reload发现nginx命令居然能用了!

May 27, 2020 · 1 min · jiezi

nginx配置ssl

https://www.cnblogs.com/ghjbk...

May 27, 2020 · 1 min · jiezi

Java高可用集群架构与微服务架构简单分析

序可能大部分读者都在想,为什么在这以 dubbo、spring cloud 为代表的微服务时代,我要还要整理这种已经“过时”高可用集群架构? 本人工作上大部分团队都是7-15人编制的开发团队,对应的公司项目也大都是中小型项目,最大的项目 PV/UV 也就只有 10w/2w 。在这样的场景下,中小型公司一般都是创业起步没多久,大部分都需要本着“开源节流”、“以最小的成本把产出最大化”。微服务架构相比于高可用集群架构,个人理解,对于技术团队的成员编制相对要多一点,服务器部署成本相对也要高一点。 作为技术团队负责人,肯定要为企业整体成本考虑,否则要不了多久,便是讨薪大军的一员了吧。。。 一、如何选择1、高可用集群适用于中小型创业公司项目架构,小型技术团队快速迭代版本发布部署需求,前期低成本运行,爆发时可通过投入适量成本横向扩容服务器抗压。 特点: 前期技术开发成本低一定的服务器扩容成本核心团队编制及技能要求较少项目发布部署基本无依赖,时间成本低服务器运维成本一般大而全的项目模块分离设计更省更稳的技术架构选择微服务架构强迫症不适用2、微服务架构适用于业务架构较大的中大型科技公司项目架构,系统可拆分多个项目单独运营,大型技术团队、平台产品规范化管理,前期投入一定的成本,可以低成本扩容指定服务的服务器抗压。 前期一定的技术开发成本较低的服务器扩容成本核心团队编制及技能要求较高项目发布部署存在依赖,逐个部署,时间成本较高服务器运维成本一般或较高较清晰的项目模块分离设计更潮更时尚的技术架构选择二、高可用集群架构1、必备服务器清单负载均衡服务器web项目服务器缓存服务器数据库服务器(主备)注意:可能有人会问,若是小型项目单机服务,负载均衡是否就不需要?负载均衡主要工作是分发请求到源服务器,另一个作用也是为了保护源服务器,不暴露服务器真实IP,大幅度降低服务器被DDoS攻击的风险,可参考《被人DDoS攻击了,分析一下原理和防护》 一文。 2、扩展服务器清单更多web项目服务器(集群负载)异步服务服务器(配置中心、消息队列、job任务等)数据库服务器(读写分离、主从复制)文件服务器2、架构图 三、微服务架构1、服务器清单dubbo / spring cloud 全家桶组件服务器负载均衡服务器A模块 web项目服务器B模块 web项目服务器C模块 web项目服务器XXX模块 web项目服务器缓存服务器数据库服务器文件服务器异步服务服务器(配置中心、消息队列、job任务等)2、架构图 注:图片来源 http://yun.itheima.com/open/2... 四、总结综上,我们对于高可用集群和微服务架构做了简单的场景和架构图分析,并不是说什么场景下一定要用什么架构,也不是说什么最潮流就用什么架构,而是根据实际成本和产出作为出发点做选择。 创业公司刚起步,资金可能也就百来万,搞微服务架构,光技术团队和服务器一个月的成本就占了公司一大头,产品还没上线,公司就已经倒闭了; 有资源的公司,动不动就能获得千万级甚至更高级别的融资,业务方向众多,若还只是用高可用架构,所有的业务模块都臃肿在一个项目里,不论是代码管理还是人员管理上,都是巨大的资源消耗。 My Blogblog.guijianpan.com 技术交流

November 5, 2019 · 1 min · jiezi

Makefile886objssrchttpngxhttpscripto-错误-1

今天在一台新的服务器上 准备安装nginx 一开始装的扩展什么的都很顺利 但是make的时候出了问题 我确定所有需要的扩展都已经安装好了,出现问题如下: haiqi@haiqi-B85M-D2V:/nginx-1.10.3$ make cc1: all warnings being treated as errorsobjs/Makefile:458: recipe for target 'objs/src/core/ngx_murmurhash.o' failedmake[1]: * [objs/src/core/ngx_murmurhash.o] Error 1make[1]: Leaving directory '/nginx-1.10.3'Makefile:8: recipe for target 'build' failed make: * [build] Error 2 折腾了一上午之后 终于在另一篇文章中找到解决方法 http://www.aiuxian.com/articl... 将对应的makefile文件夹中(如本文中在 /nginx-1.10.3/objs/Makefile) 找到 -Werrori 并去掉 在重新make即可 查了-Werrori意思之后 发现原来它要求GCC将所有的警告当成错误进行处理 所有导致错误输出 并不能进行下一步

November 3, 2019 · 1 min · jiezi

如果你是小白linux快速入门技术值得你收藏

Linux是一个操作系统软件。 与Windows不同的是,Linux是一套开放源代码程序的、并可以自由传播的类Unix操作系统,它是一个支持多用户、多任务、多线程和多CPU的操作系统。它能运行主要的UNIX工具软件、应用程序和网络协议。它支持32位和64位硬件。 Linux继承了Unix以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。 如何快速入门,需要哪些知识点?1:linux环境专栏 linux系统安装 linux开发环境ssh与Samba配置 linux开发环境Gcc配置 linux的命令操作8条目录操作与5条文件操作 2:shell 脚本编程案例 3:统计文件单词数量(文本操作) 状态机实现文件单词统计 4:实现通讯录(结构体) 通讯录实现的架构设计与需求分析 链表的实现与数据结构的定义 架构接口层的实现 业务逻辑的分析与实现 通讯录人员操作代码的调试 通讯录人员操作代码调试与运行 通讯录删除人员操作的调试与BUG解决 文件保存于加载的接口层实现 文件保存业务实现 通讯录调试与运行 5:并发下的技术方案(锁) 多线程并发锁的项目介绍 多线程并发锁的方案一互斥锁 多线程并发锁的方案一自旋锁 多线程并发锁的方案一原子操作 总结如果你以前从未接触过Linux,上面这五个知识点其实是最简单的入门技术知识,你只需多学多操作即可 linux入门教程 希望刚 开始接触linux的 你少走弯路 祝 学习愉快 ~

November 2, 2019 · 1 min · jiezi

云服务器部署前端静态资源文件

双十一前夕,花费85元买了一年的百度云服务器,终于有机会玩弄自己的服务器了。作为一个前端,之前也没搞过这玩意,特此记录。 一. 远程登录云服务器方法一:点击VNC远程登录按钮方法二:使用MobaXterm远程登录(推荐使用这个) 二. 利用Nginx搭建静态资源服务器安装nginx yum install nginx启动nginx service nginx start查看是否启动成功 service nginx status三. 上传资源文件以我本地的react项目工程为例,打包编译(Vue、Angular或单纯的.html文件都可以) npm run build将打包好的资源文件上传到home文件夹下(上传方式:拖拽或者点击上传按钮) 四. 配置nginx代理进入nginx配置文件目录,找到nginx.conf文件 cd /etc/nginx/打开配置文件 vim nginx.conf配置代理 server { listen 80 default_server; listen [::]:80 default_server; server_name 此处配置服务器IP; root /usr/share/nginx/html; # Load configuration files for the default server block. include /etc/nginx/default.d/*.conf; # 静态资源文件 location / { # 静态资源存放路径 root /home/; index index.html index.htm; } error_page 404 /404.html; location = /40x.html { } error_page 500 502 503 504 /50x.html; location = /50x.html { } }重启nginx ...

November 2, 2019 · 1 min · jiezi

nginx-配置跨域失效修复

nginx 配置跨域不生效 如下配置server { listen 80; server_name localhost; # 接口转发 location /api/ { # 允许请求地址跨域 * 做为通配符 add_header 'Access-Control-Allow-Origin' '*'; # 设置请求方法跨域 add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS, PUT, DELETE'; # 设置是否允许 cookie 传输 add_header 'Access-Control-Allow-Credentials' 'true'; # 设置请求头 这里为什么不设置通配符 * 因为不支持 add_header 'Access-Control-Allow-Headers' 'Authorization,Content-Type,Accept,Origin,User-Agent,DNT,Cache-Control,X-Mx-ReqToken,X-Data-Type,X-Requested-With,X-Data-Type,X-Auth-Token'; # 设置反向代理 proxy_pass 127.0.0.1:8081/; } }网上的 nginx 跨域配置主要是以上版本,然而很多都是抄一抄,并没有真的去实践,故写了下文章提醒下有需要的人,不要盲目抄,学会分析。nginx 修改如下配置后生效server { listen 80; server_name localhost; # 接口转发 location /api/ { # 允许请求地址跨域 * 做为通配符 add_header 'Access-Control-Allow-Origin' '*'; # 设置请求方法跨域 add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS, PUT, DELETE'; # 设置是否允许 cookie 传输 add_header 'Access-Control-Allow-Credentials' 'true'; # 设置请求头 这里为什么不设置通配符 * 因为不支持 add_header 'Access-Control-Allow-Headers' 'Authorization,Content-Type,Accept,Origin,User-Agent,DNT,Cache-Control,X-Mx-ReqToken,X-Data-Type,X-Requested-With,X-Data-Type,X-Auth-Token'; # 设置 options 请求处理 if ( $request_method = 'OPTIONS' ) { return 200; } # 设置反向代理 proxy_pass 127.0.0.1:8081/; } }两者代码区别 主要就是下面这行代码 ...

October 18, 2019 · 1 min · jiezi

Nginx部署Angular项目

1.创建前端项目目录进入/var文件夹 cd /var在/var目录下创建www文件夹 mkdir www进入/var/www目录,创建test文件夹 cd www #进入www目录mkdir test2.将前端编译后的文件上传到/var/www/test目录3.配置nginx下test目录及选项进入/etc/nginx/conf.d/目录 cd /etc/nginx/conf.d/打开default.conf,写入test的相关配置 server { listen 80; # nginx监听端口 server_name localhost; #若有域名则将localhost替换为域名 #charset koi8-r; #access_log /var/log/nginx/host.access.log main; location / { root /var/www/test; #test项目路径 index index.html index.htm; #默认起始页 try_files $uri $uri/ /index.html; #spa前端项目路由配置 } #error_page 404 /404.html; # redirect server error pages to the static page /50x.html # error_page 500 502 503 504 /50x.html; location = /50x.html { root /usr/share/nginx/html; } # proxy the PHP scripts to Apache listening on 127.0.0.1:80 # #location ~ \.php$ { # proxy_pass http://127.0.0.1; #} # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000 # #location ~ \.php$ { # root html; # fastcgi_pass 127.0.0.1:9000; # fastcgi_index index.php; # fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name; # include fastcgi_params; #} # deny access to .htaccess files, if Apache's document root # concurs with nginx's one # #location ~ /\.ht { # deny all; #}}4.测试部署curl localhost #假设项目端口为80则为localhost如若返回的html字符串中没有异常报错的状态码则为成功 ...

October 17, 2019 · 1 min · jiezi

nginx奇怪问题-停止服务器客户端依然可以请求到接口并且获取到数据

nginx配置,nginx.conf配置如下内容。 `location ~ .*.(gif|jpg|jpeg|png|bmp|swf|js|css)$ { #禁止缓存,每次都从服务器请求 add_header Cache-Control no-store;}`

October 17, 2019 · 1 min · jiezi

vuerouter-history模式下刷新页面404问题

搜索了很多前辈的解决方案一直没有解决问题,配置类似如下` location / { root html; index index.html index.htm; try_files $uri $uri/ /index.html; }`总是会报500。最后研究才发现,前辈得解决案例是nginx下部署一个前端项目,而我这边的情况是一个nginx下有多个前端项目,稍微调整一下路径后,问题迎刃而解。具体方法如下(只需要修改nginx的nginx.conf文件,此修改方式不影响其他前端项目的路由默认,只处理本人得项目):`server { listen 8090; server_name localhost; #charset koi8-r; #access_log logs/host.access.log main; location / { root html; index index.html index.htm; } #解决路由history模式下,刷新页面404问题 location /webName/ { root html; index index.html index.htm; try_files $uri $uri/ /webName/index.html; } ....}`

October 16, 2019 · 1 min · jiezi

nginx-emerg-bind-to-000080-failed解决方案

第一步:查看nginx是否已经启动了ps -e | grep nginx第二步:如果没有的话则按照提示,查看0.0.0.0:80端口谁占用了netstat -ltunp第三步:干掉端口进程 kill 2030 //kill PID 根据PID显示数字,用2030取代

October 15, 2019 · 1 min · jiezi

验证Nginx的长连接keepalive配置

写在前面最近都在折腾 Nginx 服务器的学习和测试,前几天稍微温习了一下计算机网络方面的知识(一方面是兴趣,一方面是这次学习过程中因为这些计算机基础遗忘,有很多细节问题让人很懵逼),也在 Linux 上试了一下 tcpdump 命令,通过抓包来验证自己之前的各种猜想(因为不懂所以瞎猜),分析数据包依旧是用的 Wireshark 之前一直以为只要使用 Http1.1 协议就可以复用连接,节省反复握手挥手的时间消耗,但抓包后才发现,"简简单单"的长连接使用,还真是涉及了 Nginx 、 JMeter 、 Tomcat 里的很多配置啊 JMeter 虽然在 Http 请求的配置中默认勾选了使用 KeepAlive,但是实际使用中并没有生效Nginx 涉及到与客户端的配置 keepalive_timeout 和 keepalive_requests,与后端服务器的配置 keepalive(1.15.3之后,upstream 模块也新增了 keepalive_timeout 和 keepalive_requests,本篇暂不涉及)Tomcat 默认也有一个 keepAliveTimeout 配置知道了这些相关配置后,一方面想实战下 tcpdump 和 Wireshark 的使用,一方面也想用数据验证下 Nginx 的这三个配置,所以就有了接下来的内容 环境说明Nginx 1.14.0Linux 2.6.32JMeter 5.0Wireshark 2.6.4JMeter 所在主机 IP 172.16.40.199Tomcat 所在主机 IP 172.16.40.201Nginx 所在主机 IP 172.16.40.2240. 和客户端的长连接超时时间指令说明语法: keepalive_timeout timeout [header_timeout];默认值: keepalive_timeout 75s; 上下文: http, server, location 第一个参数设置客户端的长连接在服务器端保持的最长时间(在此时间客户端未发起新请求,则长连接关闭)。 第二个参数为可选项,设置“Keep-Alive: timeout=time”响应头的值。 可以为这两个参数设置不同的值。 ...

October 14, 2019 · 2 min · jiezi

通过nginx重写rewrite将老版本api接口转发到新版本接口上

问题: 项目开始,nginx是通过匹配control来转发的,后面随着业务不停增加,每次都需要修改nginx,甚是麻烦,所以决定为不同的服务取一个名称——服务域名称,然后我们通过匹配服务域名称的模式就解决这个不同修改配置的问题了。 刚开始的nginx配置: location ~* /api/AppVersion { proxy_pass http://192.168.1.88:8888;}目前期望的配置(serviceName后面包含n多控制器): location ~* /api/Business { proxy_pass http://192.168.1.88:8888;}如果只是web站点,这么做就差不多ok了,但是我们有一个app,老版本需要升级,只能调用第一中接口,但是我们新版本的接口都加上了serviceName(/api/Business/AppVersion),目前想到两种方式: 1、提供新老版本的api接口;2、通过nginx配置重写(重新转发)——当时不会,只是知道nginx强大,应该能够支持; 所以查找了一下,以作备忘: location ~* /api/AppVersion/GetVersion { rewrite ^ http://192.168.1.88:8888/api/Business/AppVersion/GetVersion;}那么当你调用老接口/api/AppVersion/GetVersion的时候,nginx会自动帮你转发到新接口上/api/Business/AppVersion/GetVersion,也不需要修改代码,安全方便;

October 14, 2019 · 1 min · jiezi

Nginx简易入门

Nginx的简介"Nginx是一款轻量级的HTTP服务器,采用事件驱动的异步非阻塞处理方式框架,这让其具有极好的IO性能,时常用于服务端的反向代理和负载均衡。"-----官方介绍Nginx是一款自由的、开源的、高性能的HTTP服务器和反向代理服务器;同时也是一个IMAP/POP3/SMTP代理服务器;nginx可作为一个HTTP服务器进行网站的发布处理,另外nginx可以作为反向代理进行负载均衡的实现。 优点 支持海量高并发:采用IO多路复用epoll。官方测试Nginx能够支持5万并发链接,实际生产环境中可以支撑2-4万并发连接数。内存消耗少:在主流的服务器中Nginx目前是内存消耗最小的了,比如我们用Nginx+PHP,在3万并发链接下,开启10个Nginx进程消耗150M内存。免费使用可以商业化:Nginx为开源软件,采用的是2-clause BSD-like协议,可以免费使用,并且可以用于商业。配置文件简单:网络和程序配置通俗易懂,即使非专业运维也能看懂。在Ubuntu 18.04 上安装Nginx安装 sudo apt-get updatesudo apt-get install nginx 调整防火墙 Nginx在安装时将自己注册为ufw服务,这使得Nginx可以直接访问Nginx。 在测试Nginx之前,需要调整防火墙软件以允许访问该服务。 列出应用配置文件: sudo ufw app list 如上图,Nginx有三种配置文件可用: Nginx Full :此配置文件打开端口80(正常,未加密的网络流量)和端口443(TLS / SSL加密流量)Nginx HTTP :此配置文件仅打开端口80(正常,未加密的网络流量)Nginx HTTPS :此配置文件仅打开端口443(TLS / SSL加密流量)建议您启用最严格的配置文件,该配置文件仍将允许您配置的流量。 由于我们尚未在本指南中为我们的服务器配置SSL,因此我们只需要允许端口80上的流量。 启用: sudo ufw allow 'Nginx HTTP'验证更改: sudo ufw status正常情况下会输出如下: 但是,也有可能出现以下情况: 解决方法: sudo ufw enable检查你的Web服务器 systemctl status nginx 正如上面所见,服务已经成功启动。 在浏览器测试 在浏览器地址栏输入你的服务器IP地址。如果在本地安装,可输入 localhost,你的浏览器会显示nginx的欢迎页面。 Nginx配置文件解读进入/etc/nginx目录,打开nginx.conf文件 #运行用户user www-data; #worker_processes定义了nginx对外提供web服务时的worder进程数。最优值取决于许多因素,包括(但不限于)CPU核的数量、存储数据#的硬盘数量及负载模式。#不能确定的时候,将其设置为可用的CPU内核数将是一个好的开始(设置为“auto”将尝试自动检测它)。worker_processes auto; #进程pid存放位置pid /run/nginx.pid; #包含的子配置项位置和文件include /etc/nginx/modules-enabled/*.conf; # 事件模块events { # worker_connections设置可由一个worker进程同时打开的最大连接数 worker_connections 768; # multi_accept 告诉nginx收到一个新连接通知后接受尽可能多的连接。 # multi_accept on;}# http核心模块http { ## # Basic Settings ## # sendfile 是否启动高效传输文件模式 #sendfile可以让Nginx在传输文件时直接在磁盘和tcp socket之间传输数据. # 如果这个参数不开启, 会先在用户空间(Nginx进程空间)申请一个buffer, 用read函数把数据从磁盘读到 #cache, # 再从cache读取到用户空间的buffer, 再用write函数把数据从用户空间的buffer写入到内核的buffer, # 最后到tcp socket. 开启这个参数后可以让数据不用经过用户buffer, 默认off. sendfile on; # tcp_nopush必须在sendfile开启模式才有效, 告诉Nginx在一个数据包里发送所有头文件, 而不一个接一个 # 发送, 默认off. tcp_nopush on; # tcp_nodelay 告诉Nginx不要缓存数据, 而是一段一段的发送, 当需要及时发送数据时, 就应该开启这个功 能, 这样发送一小块数据信息时就能够立即得到返回值, 默认on. tcp_nodelay on; # keepalive_timeout 给客户端分配keep-alive链接超时时间。服务器将在这个超时时间过后关闭链接。 # 我们将它设置低些可以让ngnix持续工作的时间更长。 keepalive_timeout 65; # 影响散列表的冲突率, types_hash_max_size越大, 就会消耗更多的内存, 但散列key的冲突率会降低, # 检索速度就更快. types_hash_max_size越小, 消耗的内存就越小, 但散列key的冲突率可能上升 types_hash_max_size 2048; # 是否显示版本号, 若不显示, 浏览器访问时抓包, 查看HTTP响应的Server头没有版本号, 默认on # server_tokens off; # 保存服务器名字的hash表是由指令server_names_hash_max_size和server_names_hash_bucket_size # 所控制, 若Nginx给出需要增大hash max size或hash bucket size的提示, 那么首要的是增大前一个参数 # 的大小. # server_names_hash_bucket_size 64; # server_names_hash_max_size 512; # 若为off, 则会以当前服务器的IP地址进行拼接URL. 若为on, 则会首先查找server_name, # 若没有找到, 则会查找请求头的HOST字段, 若还是没有, 则以当前服务器的IP进行拼接, 默认on. # server_name_in_redirect off; # 设定MIME类型, 类型由mime.type文件定义. include /etc/nginx/mime.types; default_type application/octet-stream; ## # SSL Settings ## ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # Dropping SSLv3, ref: POODLE ssl_prefer_server_ciphers on; ## # Logging Settings ## # 每一个访问请求的记录位置 access_log /var/log/nginx/access.log; # Nginx错误信息的记录位置 error_log /var/log/nginx/error.log; ## # Gzip Settings ## # 是否启动Gzip gzip on; # 和HTTP头有关系, 加个vary头, 给代理服务器用的, 有的浏览器支持压缩, 有的不支持, # 为了避免浪费不支持的也压缩, 根据客户端的HTTP头来判断, 是否需要压缩. # gzip_vary on; # Nginx作为反向代理的时候该参数起作用, 根据某些请求和应答来决定是否在对代理请求的应答启用Gzip压缩, # 是否压缩取决于请求头中的"Via"字段, 指令中可以同时指定多个不同的参数, 可选值值为: # off - 关闭所有的代理结果数据的压缩 # expired - 启用压缩,如果header头中包含 "Expires" 头信息 # no-cache - 启用压缩,如果header头中包含 "Cache-Control:no-cache" 头信息 # no-store - 启用压缩,如果header头中包含 "Cache-Control:no-store" 头信息 # private - 启用压缩,如果header头中包含 "Cache-Control:private" 头信息 # no_last_modified - 启用压缩,如果header头中不包含 "Last-Modified" 头信息 # no_etag - 启用压缩 ,如果header头中不包含 "ETag" 头信息 # auth - 启用压缩 , 如果header头中包含 "Authorization" 头信息 # any - 无条件启用压缩 # 默认为off. # gzip_proxied any; # Gzip压缩比, 值为1~9, 1的压缩比最小处理速度最快, 9的压缩比最大但处理最慢(传输快但比较消耗CPU) # gzip_comp_level 6; # 设置系统获取几个单位的缓存用于存储Gzip的压缩结果数据流, 4 8k代表: 按照原始数据大小以8k为单位的4倍 # 申请内存. # gzip_buffers 16 8k; # 识别HTTP的协议版本, 99.99%的浏览器都支持1.1, 所以可以不用设这个值, 保持系统默认即可, 默认1.1. # gzip_http_version 1.1; # 匹配MIME类型进行压缩 # gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript; ## 虚拟主机设置 # Virtual Host Configs ## # Nginx的配置很灵活, 支持include配置文件, 如果我们的域名都配置到nginx.conf, 那么这个文件就会比较 # 乱,也影响管理和阅读, 所以直接拆分出来, 分成不同的配置文件. include /etc/nginx/conf.d/*.conf; # 加载一个外部的配置文件, sites-enabled文件夹下只有一个default文件, # 这个外部的配置文件就是负责我们Nginx的默认代理, 也就是server块的配置. include /etc/nginx/sites-enabled/*;}#配置邮件服务器#mail {# # See sample authentication script at:# # http://wiki.nginx.org/ImapAuthenticateWithApachePhpScript# # 指定Nginx提供邮件服务时, 用于HTTP认证的服务地址# # auth_http localhost/auth.php;# # 指定现有客户端上的POP3协议的扩展# # pop3_capabilities "TOP" "USER";# # 指定现有客户端上的IMAP协议的扩展# # imap_capabilities "IMAP4rev1" "UIDPLUS";# # server {# # 指定邮件服务器监听的IP地址和端口# listen localhost:110;# # 指定虚拟机支持的加密协议# protocol pop3;# # 是否开启邮件代理# proxy on;# }# # server {# # 指定邮件服务器监听的IP地址和端口# listen localhost:143;# # 指定虚拟机支持的加密协议# protocol imap;# # 是否开启邮件代理# proxy on;# }#}进入 /etc/nginx/sites-available 目录,打开default文件 ...

October 13, 2019 · 5 min · jiezi

使用docker从零开始搭建私人代码仓库之nginx搭建

docker搭建nginx教程通过《使用docker从零开始搭建私人代码仓库之MySQL搭建》和《使用docker从零开始搭建私人代码仓库之gogs搭建》的搭建其实已经可以搭建成功了代码仓库的了,但是为了访问方便,我们有时候需要绑定域名,那么我们可以通过nginx进行转发。添加nginx容器打开上一个教程中的docker-compose.yml文件,填入如下内容: gogs_nginx: build: context: nginx tty: true depends_on: - gogs restart: always networks: frontend: ports: - 80:80 volumes: - ./nginx/conf:/etc/nginx/conf.d - ${DATA_DIR}/nginx/conf:/var/log/nginx最终docker-compose.yml文件内容如下: version: "3"networks: frontend:services: mysql: image: mysql:${MYSQL_VERSION} networks: frontend: tty: true restart: always ports: - 3306:3306 volumes: - ${DATA_DIR}/mysql/:/var/lib/mysql environment: - MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD} - MYSQL_USER=${MYSQL_USER} - MYSQL_PASSWORD=${MYSQL_PASSWORD} gogs: image: gogs/gogs depends_on: - mysql tty: true networks: frontend: restart: always volumes: - ${DATA_DIR}/gogs:/data gogs_nginx: build: context: nginx tty: true depends_on: - gogs restart: always networks: frontend: ports: - 80:80 volumes: - ./nginx_conf:/etc/nginx/conf.d - ${DATA_DIR}/nginx/conf:/var/log/nginx在项目根目录创建nginx_conf目录并创建nginx的配置文件default.conf ...

October 9, 2019 · 1 min · jiezi

nginx反向代理负载均衡配置及vue项目部署

nginx配置文件结构Nginx的配置文件是一个纯文本文件,它一般位于Nginx安装目录的conf目录下,整个配置文件是以block的形式组织的。每个block一般以一个大括号“{”来表示。block可以分为几个层次,整个配置文件中Main命令位于最高层,在Main层下面可以有Events、 HTTP等层级,而在HTTP层中又包含Server层,即server block, Nginx 服务的基本配置项详解我的本机nginx配置文件路径是 /usr/local/nginx/conf/ 这个目录下面,其中nginx.conf是主配置文件。Nginx.conf配置文件主要分成四个部分: main (全局设置) 。 sever (主机设置)。 upstram负载均街服务器设置。 location(URL匹配特定位置的设置)。 说明 main部分设置的命令将影响其他所有设置。 server 部分的命令主要用于指定主机和端口;。upstream命令主要用于负载均衡,设置一系列的后端服务器。 location 部分用于匹配网页位置。这四者之间的关系式server继承main, location 继承server, upstream 既不会继承其他设置也不会被继承。 在这四个部分当中,每个部分都包含若干命令,这些命令主要包含Nginx的主模块命令,事件模块命令,HTTP核心模块命令,同时每个部分还可以使用其他HTTP模块命令(例如HTTP SSL模块,HttpGzip Static模块和Http Addition模块等)。 下面通过一个Nginx配置实例详细介绍nginx.conf每个命令的含义。 #user nobody; worker_processes 1;#error_log logs/error.log;#error_log logs/error.log notice;#error_log logs/error.log info;#pid logs/nginx.pid;events { use epoll; worker_connections 1024;}/* 以上这块配置代码是对nginx全局属性的配置。 user :主模块命令, 指定Nginx的worker进程运行用户以及用户组,默认由nobody账号运行。 worker processes: 指定Nginx要开启的进程数。 error log:用来定义全局错设日志文件的路径和日志名称。日志输出级别有debug,info,notice,warn,error,crit 可供选择,其中debug输出日志最为详细,面crit输出日志最少。 pid: 用来指定进程id的存储文件位置。 event:设定nginx的工作模式及连接数上限,其中参数use用来指定nginx的工作模式(这里是epoll,epoll是多路复用IO(I/O Multiplexing)中的一种方式),nginx支持的工作模式有select ,poll,kqueue,epoll,rtsig,/dev/poll。其中select和poll都是标准的工作模式,kqueue和epoll是高效的工作模式,对于linux系统,epoll是首选。 worker_connection是设置nginx每个进程最大的连接数,默认是1024,所以nginx最大的连接数max_client=worker_processes * worker_connections。进程最大连接数受到系统最大打开文件数的限制,需要设置ulimit。*/#下面部分是nginx对http服务器相关属性的设置http { include mime.types; 主模块命令,对配置文件所包含文件的设定,减少主配置文件的复杂度,相当于把部分设置放在别的地方,然后在包含进来,保持主配置文件的简洁 default_type application/octet-stream; 默认文件类型,当文件类型未定义时候就使用这类设置的。 #log_format main '$remote_addr - $remote_user [$time_local] "$request" ' 指定nginx日志的格式 # '$status $body_bytes_sent "$http_referer" ' # '"$http_user_agent" "$http_x_forwarded_for"'; #access_log logs/access.log main; sendfile on; 开启高效文件传输模式(zero copy 方式),避免内核缓冲区数据和用户缓冲区数据之间的拷贝。 #tcp_nopush on; #keepalive_timeout 0; 客户端连接超时时间 keepalive_timeout 65; #gzip on; 设置是否开启gzip模块 #server段是虚拟主机的配置 这里可以写在别的文件中 然后在包含进来,比如写在/usr/local/nginx/vhost/xxx.conf 目录某文件中 然后在包含进来,可以包含多个文件 include /usr/local/nginx/vhost/*; server { listen 80; 虚拟主机的服务端口 server_name localhost; 用来指定ip或者域名,多个域名用逗号分开 #charset koi8-r; #access_log logs/host.access.log main; location / { 地址匹配设置,支持正则匹配,也支持条件匹配,这里是默认请求地址,用户可以location命令对nginx进行动态和静态网页过滤处理 root html; 虚拟主机的网页根目录 index index.html index.htm; 默认访问首页文件 } #error_page 404 /404.html; # redirect server error pages to the static page /50x.html # error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } # proxy the PHP scripts to Apache listening on 127.0.0.1:80 # location ~ \.php$ { 将以php为后缀的文件转发到 FastCGI处理. 使用FastCGI默认配置。本地8088端口处理 fastcgi_pass http://127.0.0.1:8088; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } #静态文件,nginx自己处理 location ~ ^/(images|javascript|js|css|flash|media|static)/ { root /var/www/public/images; expires 30d; #缓存时间30天,静态文件更新不多,过期时间可以设大一点。 } #配置Nginx状态的地址 location /NginxStatus { stub_status on; access_log on; auth_basic "NginxStatus"; auth_basic_user_file conf/htpasswd; } #配置nginx负载均衡的服务器列表 upstream mysvr { #weigth参数表示权值,权值越高被分配到的几率越大 #本机上的Squid开启3128端口 server 192.168.199.1:88 weight=5; server 192.168.199.1:80 weight=1; } # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000 # #location ~ \.php$ { # root html; # fastcgi_pass 127.0.0.1:9000; # fastcgi_index index.php; # fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name; # include fastcgi_params; #} # deny access to .htaccess files, if Apache's document root # concurs with nginx's one # #location ~ /\.ht { # deny all; #} } #端口转发 (晚点补上...) # another virtual host using mix of IP-, name-, and port-based configuration # #server { # listen 8000; # listen somename:8080; # server_name somename alias another.alias; # location / { # root html; # index index.html index.htm; # } #} # HTTPS server # #server { # listen 443 ssl; # server_name localhost; # ssl_certificate cert.pem; # ssl_certificate_key cert.key; # ssl_session_cache shared:SSL:1m; # ssl_session_timeout 5m; # ssl_ciphers HIGH:!aNULL:!MD5; # ssl_prefer_server_ciphers on; # location / { # root html; # index index.html index.htm; # } #}}现在来实践一下 ...

October 5, 2019 · 2 min · jiezi

DOCKER-PHPNGINX

临近国庆,又回过头来鼓捣docker,因为从事php开发,所以还是先从环境入手。 本来考虑搭建php+mysql+nginx+redis全部,但是由于使用的都是公司的mysql和redis,故只搭建php+nginx,因为我的操作系统是win10,一下操作都是在win下完成的。 首先先拉取镜像,当然你也可以自己编写dockerfile去构建自己的镜像。这里先拉取nginx镜像: docker pull nginx这里会默认拉取最新的镜像,完成后可以使用docker images查看已有镜像。 接下来安装php,跟nginx镜像一样,可以通过直接拉取镜像完成操作,拉取的php镜像只有部分扩展,自己需要的扩展需要进入容器里面去安装,官方给出了三种安装php扩展的方法: docker-php-ext-installpecl install name-xxxcurl 源码安装但是通过这种方式运行的php存在一个问题,那就是重新创建的镜像或重新运行的容器,是没有上次安装好的扩展的,需要重新安装,所以,这里采用dockerfile构建自己的php镜像。 先创建一个目录,然后在这个目录里面创建dockerfile文件,文件内容如下: FROM php:7.2-fpm AS php7.2RUN docker-php-ext-install mysqli pdo pdo_mysql \ && pecl install redis-5.0.0 \ && pecl install yaf-3.0.8 \ && pecl install xdebug-2.7.2 \ && docker-php-ext-enable redis xdebug yaf \ && cd /usr/local/etc/php \ && touch php.ini然后在当前目录打开cmd,执行: docker build -t php7.2 .然后就会开始构建自己的php镜像,上述dockerfile比较简单,只是在php:7.2-fpm镜像的基础上,使用docker-php-ext-install、pecl安装了mysqli,pdo,redis,yaf,xdebug扩展,并创建了一个php.ini文件,用于后面挂载本地php.ini文件。 dockerfile还可以执行更复杂的操作,我们可以在ubuntu镜像里面通过RUN去执行终端命令安装php和nginx,并运行nginx、php-fpm服务,这样就可以在一个镜像里面同时安装php+nginx,但是这里只进行最简单的php镜像构建。 等一切完成之后,我们现在就有两个镜像 现在我们需要做的就是启动这两个镜像,并将本地的工作目录和配置文件挂载到容器对应的目录,但是,每次都要分别启动两个镜像并挂载相应的文件,属实比较麻烦,并且每次的ip还会变化导致需要更改nginx配置,这样还不如直接安装集成环境呢。。。 因此,这里采用docker-compose去启动这两家伙: version: '2'services: nginx: container_name: "nginx" image: nginx ports: - "80:80" depends_on: - php volumes: - "F:/phpstudy/PHPTutorial/nginx/conf.d:/etc/nginx/conf.d" - "F:/phpstudy/PHPTutorial/WWW:/usr/www/html" - "F:/logs/error.log:/var/log/nginx/error.log" - "F:/logs/access.log:/var/log/nginx/access.log" networks: - app_net php: image: php7.2:latest ports: - "9000:9000" volumes: - "F:/phpstudy/PHPTutorial/WWW:/var/www/html" - "F:/lnmp/php.ini:/usr/local/etc/php/php.ini" networks: - app_net container_name: "php"networks: app_net: ipam: driver: default config: - subnet: 10.10.0.0/16上面就是我们的docker-compose.yml文件,通过该文件和docker-compose命令可以快速部署分布式应用,这个文件同样放在刚才的dockerfile目录内,该文件里面指定了需要挂载的文件,以及映射的端口,这样就不需要每次都去手动输入,执行命令: ...

September 30, 2019 · 1 min · jiezi

Nginx

Nginx 的简介1、什么是 NginxNginx 是高性能的 HTTP 和反向代理的服务器,处理高并发能力是十分强大的,能经受高负 载的考验,有报告表明能支持高达 50,000 个并发连接数。 2、正向代理(1)需要在客户端配置代理服务器进行指定网站访问 3、反向代理暴露的是代理服务器地址,隐藏了真实服务器 IP 地址。 有点类似docker的端口暴露 4、负载均衡增加服务器的数量,然后将请求分发到各个服务器上,将原先请求集中到单个服务器上的 情况改为将请求分发到多个服务器上,将负载分发到不同的服务器,也就是我们所说的 负载均衡 5、动静分离 Nginx 的安装1.安装依赖 yum install gcc-c++yum -y install pcre pcre-develyum -y install zlib zlib-develyum install -y openssl openssl-devel2.官网下载Nginx安装包3.下载后上传到linux4.创建Nginx解压路径 mkdir -p /usr/local/nginx5.解压tar.gz文件名称:nginx-1.17.3.tar.gz tar -zxvf nginx-1.17.3.tar.gz -C /usr/local/nginx6.进入到安装目录 cd /usr/local/nginx/nginx-1.17.3执行: ./configure7.在nginx-1.17.3目录下执行编译命令 make && make install8.查看安装发现他会自动创建并把文件安装到 :/usr/local/nigx那最好开始创建解压目录时候不叫 nginx9.启动 cd sbin./nginx查看进程:ps -ef | grep nginx10.访问ip地址:http://192.168.83.128/参考资料 尚硅谷 《nginx课堂笔记》

September 20, 2019 · 1 min · jiezi

nodeexpressnginx架构关于上传文件出现-Request-Entity-Too-Large-的问题

解决方法分两步走: 1、修改express框架设置请求的允许最大值将原框架中这两行代码: app.use(bodyParser.json());app.use(bodyParser.urlencoded({ extended: false }));修改为: app.use(bodyParser.json({limit: '50mb'})); // 这里limit值可以根据实际情况自由设定app.use(bodyParser.urlencoded({ limit: '50mb', extended: true}));重启服务继续上传大文件,如果问题解决,到此OK。如果仍然没有解决就有可能是代理nginx配置文件设置的问题,进入第二步。 2、修改nginx的配置文件nginx.conf在 http{} 中添加或者修改client_max_body_size设置 http { client_max_body_size 100m; //添加或修改本行配置,最大允许值可根据需求自由设定 include mime.types; default_type application/octet-stream; ...}修改后上传覆盖掉原来的配置 路径/usr/local/nginx/conf/nginx.conf 一般路径是这样,特殊情况自己去查。重启nginx nginx -s reload或者/usr/local/nginx/sbin/nginx -s reload问题解决。

September 10, 2019 · 1 min · jiezi

Centos7-编译安装-LNMP-可能是全网最全

声明本文档请用于学习,生产环境谨慎使用 前言网络上有很多关于Windows或者Linux下面安装LNMP的教程,非常多。但是我还是选择自己去一步一步实现,即使我已经按照网上的教程在不同系统中装了N多次。为什么?因为不懂。不懂为什么需要那些系统软件,不懂那些编译项为什么要加?有何作用?只会复制粘贴。 几点建议: 编译安装只是环境搭建的开始,别想着把所有问题都在此阶段解决坚持按需编译,最小化安装,把问题暴露出来,去解决它对使用的每一个编译参数负责远离复制粘贴,你可能还有救完全不了解的软件尽可能避免编译安装目标我们把Laravel跑起来! 基本情况软件文档列表此处文档是基础软件文档,不是很全,一部分软件文档在内容中。 NginxMysqlRedisPhpSwoole系统要求# 查看CentOS版本[root@bogon source]# cat /etc/redhat-release CentOS Linux release 7.6.1810 (Core) [root@bogon source]# cat /proc/versionLinux version 3.10.0-957.el7.x86_64 (mockbuild@kbuilder.bsys.centos.org) (gcc version 4.8.5 20150623 (Red Hat 4.8.5-36) (GCC) ) #1 SMP Thu Nov 8 23:39:32 UTC 2018软件列表系统内置 CURL 命令,所以我们选择CURL下载软件curl -O xxx,如果软件包出现解压问题,不是因为tar -zxf 解压不了这个包。而是说明这个包下载的不完整,或者说因为网络原因只是一个空包,解决办法是删除后重新下载。另外防止网站迁移,请使用curl -OL参数.-L:跟踪重定向国外资源下载太慢,请使用迅雷下载,然后通过scp上传到服务器,常用参数: -r 下载整个目录-p 指定端口,默认 22使用场景: scp -p <server port> <server user>@<server ip>:<server path>/<server file> <local path> 这是下载服务器资源,资源将被保存到 <local path>。scp -p <server port> <local path>/<local file> <server user>@<server ip>:<server path> 这是上传本地文件到服务器指定路径mysql-8.0.17.tar.gznginx-1.16.1.tar.gzphp-7.3.9.tar.gzredis-5.0.5.tar.gzswoole-4.4.4.tgzSoftware Collections为什么先说这个,为了给大家提供一个不需要关注 lnmp 系统依赖,而只是编译安装 lnmp 的方法。 ...

September 9, 2019 · 16 min · jiezi

nginx-location-rewrite常用详解

location以 = 开头,表示精确匹配;如只匹配根目录结尾的请求,后面不能带任何字符串。以^~ 开头,表示uri以某个常规字符串开头,如果匹配到,则不继续往下匹配。不是正则匹配以~ 开头,表示区分大小写的正则匹配;以~* 开头,表示不区分大小写的正则匹配以/ 开头,通用匹配, 如果没有其它匹配,任何请求都会匹配到*注意 location xxx {} 其中xxx与括号之间很多时候需要空格,最好都加上 匹配顺序:(location =) > (location 完整路径) > (location ^~ 路径) > (location ~,~* 正则顺序) > (location 部分起始路径) > (/) rewriterewrite只能放在 server{}, location{}, if{}中,并且只能对域名后的文件路径起作用。 执行顺序执行server块的rewrite指令执行location匹配执行选定的location中的rewrite指令语法rewrite regex replacement [flag]; flag这儿分为server级和location级,其中if可写在server和location中,分别对应server级和location级。同级别中执行顺序看书写顺序。last : 不再执行同级rewrite,写在location中重新循环server.break : 不再执行同级rewrite,只往后匹配,如果在location中,会报404,因为location中没有嵌套location使其往继续往下级匹配;redirect : 返回302临时重定向,地址栏会显示跳转后的地址permanent : 返回301永久重定向,地址栏会显示跳转后的地址当不写flag时,再次循环同级匹配 if(condition)当表达式只是一个变量时,如果值为空或任何以0开头的字符串都会当做false直接比较变量和内容时,使用=或!=~ 正则表达式匹配~* 不区分大小写的匹配!~ 区分大小写的不匹配-f和!-f 用来判断是否存在文件-d和!-d 用来判断是否存在目录-e和!-e 用来判断是否存在文件或目录-x和!-x 用来判断文件是否可执行 其他调试 default_type application/json; 在locaiton中 return 200 '$uri xxx' 变量set $a "1"if ($a = "1") { return 302}proxy_passproxy_pass http://127.0.0.1:8008/; 这里只讨论在location中的proxy_pass; ...

September 9, 2019 · 1 min · jiezi

Http-历险记之-NginxTomcat上

转自:码农翻身(微信号:coderising) 第一章 Nginx大厦汽车终于到站, 我带着保险柜从车上下来, 我想这应该是目的地了, 这是一个叫mytaobao.com的大厦,上面有两个入口 “80号通道” 和 “443号通道”。 从浏览器村出发的时候, 老IE就告诉过我, 找到这个大厦, 走安全通道进去, 自然有人接待。 哪个是安全通道? 我看到这两个通道都有很多人进进出出,有点犯嘀咕了, 正琢磨着呢, 里边出来一个保安, 用很鄙视的语气对我说:“还愣着干嘛, 还不赶紧进443通道”“为啥啊?”“你没看运你来的车吗? 上面写着HTTPS :443 端口” 奥,我确实是没有注意到, 赶紧进去吧。 进入443通道, 果然如老IE所说, 里边马上就迎过来一个人, 穿着服务员的衣服, 很热情的说:“我是4号长工, 很高兴为您服务”“长工? 你们这儿还是封建社会啊?”“是啊, 我们这儿还有地主呢,时不时给我们4个长工发号施令,对我们压榨的很厉害啊, 你看前面这么多人,这么多活, 就我们4个长工干” 我往前一看, 可不是, 前面的大厅熙熙攘攘, 但是穿服务员衣服的,我只看到4个人 。 "我和你们老IE的连接很早就建立了, 你怎么才来啊“ 4号长工问我。 "唉, 这一路实在是太远了, 先是坐着驴车从浏览器村出发, 然后坐汽车, 然后坐飞机, 中间还在几个路由器中转了好几次, 这才来到这里。 " 4号长工有个办公桌, 已经围了不少人, 七嘴八舌的问他:"我的那个图片取出来没有, 我都等了半边了”“我的javascript文件呢?”“我的css的呢?”“我的html呢?” 要是我估计头都炸了, 但是4号长工见怪不怪, 淡定的统一回复:“对不起, 再等等吧, 数据取出来了会通知我的”。 听到这句话, 我的脑子立刻亮了, 我看过《Node.js 我只需要一个店小二》, 看来这些长工们干活的方式和Node.js一样啊, 一人应付所有客户, 都是事件驱动, 怪不得他们4个长工能服务这么多人。 ...

September 7, 2019 · 1 min · jiezi

小白科普分布式和集群负载均衡弹性失效转移skycto-JEEditor

转自:码农翻身(微信号:coderising) 1、分布式小明的公司有3个系统: 系统A、系统B和系统C ,这三个系统所做的业务不同,被部署在3个独立的机器上运行, 他们之间互相调用(当然是跨域网络的), 通力合作完成公司的业务流程。 将不同的业务分布在不同的地方, 这就构成了一个分布式的系统,现在问题来了, 系统A是整个分布式系统的“脸面”, 用户直接访问,用户量访问大的时候要么是速度巨慢,要么直接挂掉, 怎么办? 由于系统A只有一份, 所以会引起单点失败。 2、集群(Cluster)小明的公司不差钱,就多买几台机器吧, 小明把系统A一下子部署了好几份(例如下图的3个服务器),每一份都是系统A的一个实例, 对外提供同样的服务,这样能睡个安稳觉了,不怕其中一个坏掉了,我还有另外2个呢。 这3个服务器上的系统就组成了一个集群。 可是对用户来说,一下子出现这么系统A ,每个系统的IP地址都不一样, 到底访问哪一个? 如果所有人都访问服务器1.1 ,那服务器1.1 会被累死, 剩下的三个闲死,成了浪费钱的摆设。 3、负载均衡(Load Balancer)小明要尽可能的让3个机器上的系统A 工作均衡一些, 比如有3万个请求,那就让3个服务器各处理1万个(当然,这是理想状况), 这叫负载均衡。 很明显,这个负载均衡的工作最好独立出来, 放到独立的服务器上 (例如Ngnix): 后来小明发现, 这个负载均衡的服务器虽然工作内容很简单,就是拿到请求,分发请求,但是它还是有可能挂掉啊, 单点失败还是会出现。 没办法,只好把负载均衡也搞成一个集群, 不过和系统A的集群有两点不同: 1.这个新的集群中虽然有两个机器,但我们可以用某种办法,让这个集群对外只提供一个IP地址, 也就是说用户看到的好像只有一个机器。2.同一时刻,我们只让一个负载均衡的机器工作, 另外一个原地待命。 如果工作的那个挂掉了,待命的那个就顶上去。 4、弹性如果这3个系统A的实例还是满足不了大量的请求,那就再加服务器! 双11来了,用户量是平时的10倍, 小明向领导申请费用又买了几十台服务器,一下子把系统A部署了几十份。 可是双11过后, 流量一下子降下来了,那几十个服务器用不上了,也变成了摆设! 被领导批评以后,小明决定尝试一下云计算, 在云端可以轻松的创建、删除虚拟的服务器, 那样就可以轻松地随着用户的请求动态的增减服务器了。 双11来了就创建虚拟服务器,等到双11过去了就把不用的关掉, 省得浪费钱。 于是小明的系统具备了一定的弹性。 5、失效转移上面的系统看起来很美好,但是做了一个不切实际的假设: 所有的服务都是无状态的。 换句话说,假设用户的两次请求直接是没有关联的。 但是现实是,大部分服务都是有状态的,例如购物车。 用户访问系统,在服务器1.1上创建了一个购物车,并向其中加入了几个商品, 然后 服务器1.1 挂掉了, 用户的后续访问就找不到服务器1.1了,这时候就要做失效转移,让另外几个服务器去接管、去处理用户的请求。 可是问题来了,在服务器1.2,1.3上有用户的购物车吗? 如果没有, 用户就会抱怨,我刚创建的购物车哪里去了? ...

September 7, 2019 · 1 min · jiezi

政采云前端小报第46期

政采云前端小报第46期浏览更多往期小报,请访问: https://weekly.zoo.team 【前端词典】一文读懂单页应用和多页应用的区别 - 掘金 前言 最近看到一些人在问单页面和多页面应用的区别。因为最近在整理 Vue 相关的内容,所以也就输出这一篇短文希望可以给你一个整体的认识。 这里也会大体介绍单页应用实现的核心 —— 前端路由。 单页应用 VS 多页应用 直观对比图 单页应用( SinglePa...在JavaScript中,如何判断数组是数组? - 前端修炼 - SegmentFault 思否 少年,你不能太天真了,我们朝夕面对的这门语言,可是JavaScript呀,任何你觉得已经习以为常的东西都可能瞬间转化成一个大坑,令人百思不得其解。Node.js软肋之CPU密集型任务-InfoQ Node.js的EventLoop只考虑了I/O操作,但对于需要占用大量CPU资源的计算,显得有点儿先天不足。本文分析了Node.js不擅于...前端必看的数据可视化入门指南 这是一篇给大家提供数据可视化开发的入门指南,介绍了可视化要解决的问题和可以直接使用的工具,我将从下面几个方面给大家介绍,同时以阿里/蚂蚁的可视化团队和资源举例说明:...【第1717期】Nginx入门指南 nginx了解weekly/101.精读《持续集成 vs 持续交付 vs 持续部署》.md at v2 · dt-fe/weekly 前端精读周刊. Contribute to dt-fe/weekly development by creating an account on GitHub.网站性能优化实战(二) - 腾讯Web前端 IMWeb 团队社区 | blog | 团队博客 Web前端 腾讯IMWeb 团队社区面试官角度看应聘:问题到底出在哪?(上) 原创不易,希望能关注下我们,再顺手点个赞~~面试官角度看应聘:问题到底出在哪?(下) 原创不易,希望能在掘金上关注下我们,再顺手点个赞~~自动化 Web 性能优化分析方案 原创不易,希望能关注下我们,再顺手点个赞~~ 本文首发于政采云前端团队博客: 自动化 Web 性能优化分析方案 在构建 Web 站点的过程中,任何一个细节都有可能影响网站的访问速度。如果开发人员不了解前端性能相关知识,很多不利网站访问速度的因素会在线上形成...Javascript垃圾回收机制 ...

September 6, 2019 · 1 min · jiezi

nginx配置ssl证书实现https加密请求详解

一、加密方式(原文链接) 1、对称加密 所谓对称加密即:客户端使用一串固定的秘钥对传输内容进行加密,服务端使用相同的秘钥进行解密。 2、非对称加密 SSL证书(遵守 SSL协议,由受信任的数字证书颁发机构CA,在验证服务器身份后颁发,具有服务器身份验证和数据传输加密功能。是公钥+私钥一对秘钥串) 非对称加密即客户端使用公钥对传输内容进行加密,服务端使用私钥对传输内容进行解密 java开发工具下载地址及安装教程大全,点[这里]。 更多深度技术文章,在[这里]。 二、http与https http是数据在网络上进行明文传输,不安全,但解析效率高(不用加解密);https是加密传输,如果使用对称加密,客户端与服务端秘钥固定,加解密效率不会有很大开销,但存在秘钥泄露风险,不够安全;如果使用非对称加密,客户端使用公钥,服务端使用私钥,加解密算法开销大,性能成本高,效率较对称加密要低,但具有较高的安全性。 实际生产环境中,https是使用了非对称加密与对称加密相结合的方式。首先使用非对称加密将客户端随机生成的对称秘钥发送到服务端(安全传输到服务端),之后客户端和服务端之间的加解密使用对称秘钥。如下图所示 三、nginx配置https 1、配置前提 nginx是否已经启用https模块,启动nginx并执行nginx -V查看,如下: Nginx配置https只需要两个文件。一个是浏览器证书(内含公钥,供浏览器加密使用),一个是私钥(供服务器解密使用) server.crt和server.key可以自己去证书颁发机构购买商业证书。也可以自己使用程序自己生成一份。此处自签一份证书。 2、自签证书 (1)创建服务器私钥,需要输入一个口令 openssl genrsa -des3 -out server.key 4096(2)创建签名请求的证书(CSR) openssl req -new -key server.key -out server.csr(3)在加载SSL支持的Nginx并使用上述私钥时除去必须的口令 openssl rsa -in server.key -out server_nopass.key(4)最后标记证书使用上述私钥和CSR openssl x509 -req -days 365 -in server.csr -signkey server_nopass.key -out server.crt最后生成的证书文件 3、配置证书 在nginx中的conf配置文件中的Server模块加入: ssl_certificate /usr/local/nginx/server.crt; ssl_certificate_key /usr/local/nginx/server_nopass.key; 原创文章,转载请注明出处。 java开发工具下载地址及安装教程大全,点这里。 ...

August 21, 2019 · 1 min · jiezi

环境安装脚本

环境安装脚本LNP 环境Nginx + PHP + Composer + Supervisor 适用于 Laravel 环境 包含内容: Nginx, PHP 7.2, Composer, SupervisorPHP 模块: fileinfo, imap, ldap, redis, memcached, swoole安装# 安装 Nginx + PHP,以下4行要全部复制一起执行wget -c http://mirrors.linuxeye.com/oneinstack-full.tar.gz \&& tar xzf oneinstack-full.tar.gz && ./oneinstack/install.sh \--nginx_option 1 --php_option 7 --phpcache_option 1 \--php_extensions fileinfo,imap,ldap,redis,memcached,swoole# 安装 Composeryum install composer# 安装 Supervisoryum install supervisor服务管理# 注册服务systemctl enable nginxsystemctl enable php-fpmsystemctl enable supervisor# 启动服务systemctl start nginxsystemctl start php-fpmsystemctl start supervisor# 重启服务systemctl restart nginxsystemctl restart php-fpmsystemctl restart supervisor# 查看服务状态systemctl status nginxsystemctl status php-fpmsystemctl status supervisorPHP 模块及配置按需添加模块# 首先进入 oneinstack 目录,然后执行## 添加 redis./install.sh --php_extensions redis## 添加 swoole./install.sh --php_extensions swoole## 添加 fileinfo./install.sh --php_extensions fileinfo启用 proc_open;; Laravel schedule 需要系统进程权限 proc_open, proc_get_status;; 找到disable_functions = passthru,exec,system,chroot,chgrp,chown,shell_exec,proc_open,proc_get_status,ini_alter,ini_restore,dl,openlog,syslog,readlink,symlink,popepassthru,stream_socket_server,fsocket,popen;; 改为disable_functions = passthru,exec,system,chroot,chgrp,chown,shell_exec,ini_alter,ini_restore,dl,openlog,syslog,readlink,symlink,popepassthru,stream_socket_server,fsocket,popen参考交互安装 - https://oneinstack.com/install/自动安装 - https://oneinstack.com/auto/安装 Nginx;PHP 版本选择 7.3;PHP 扩展选择 imagick,fileinfo,imap,ldap,redis,swoole;不装数据库;其他功能不安装。 ...

August 8, 2019 · 1 min · jiezi

纪录一次sentry升级历史

首发于:我的博客起因IOS同事说他发现了sentry的一个bug。说是因为9.0.0的bug导致debug file 提示上传成功,但是上网站却发现根本没有上传。所以就开始了我的升级之路。 调研因为我的sentry不仅仅用在了服务器端,而且还用在了客户端上。所以我需要解决如果sentry停止了,那么如何解决请求等待的问题。 Nginx那么我首先想到的就是修改nginx的配置文件。 下面是我更新的相关内容 server { listen 80; server_name track.example.com; set_real_ip_from 127.0.0.1; real_ip_header X-Forwarded-For; real_ip_recursive on; location / { // 添加这两行 default_type text/html; // 设置 content-type 表示这是一个网页 return 202; # 返回 202 表示已经接收,但是并不处理 client_max_body_size 100M; proxy_set_header X-Real-IP $remote_addr; proxy_set_header Host-Real-IP $http_host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Real-Pcol http; proxy_pass http://localhost:10000; }}使用这两行,就可以保证客户端正常请求了数据,但是我却把它给抛弃了。保证客户端的正常浏览。 sentry 升级接下来就是对sentry进行升级了。 首先,进入到指定目录 cd /data/对相关目录进行备份(备份是个好习惯,千万不要丢弃) cp -r onpremise onpremise2然后进入目录 cd onpremise停止sentry的运行 docker-compose down拉取最新代码 git pull这个时候可能会提示以下错误: ...

August 8, 2019 · 1 min · jiezi

为什么要用-HAProxy-而不是-Nginx-做负载均衡

负载均衡器是数据中心的入口点,处于访问一切资源的关键路径上。 这给了他们一些有趣的特征。首先,它们是在基础设施中需要监控的最重要的点。其次,他们处于一个独特的位置,不仅可以提供有关自己的特性,还可以提供他们所支持的后端的每项服务。 有两种流行的开源软件负载均衡器:HAProxy和nginx。让我们看看他们在这方面的异同。 启用负载均衡器上的监控如题。负载均衡器将生产环境的一切服务组织成为一个整体系统。 安装新的东西启用统计信息和监控内容启用日志启用nginx状态页面编辑 /etc/nginx/nginx.conf: server { listen 0.0.0.0:6644; access_log off; allow 127.0.0.0/8; allow 10.0.0.0/8; deny all; location / { stub_status on; } }启用HAProxy统计信息页面编辑/etc/haproxy/haproxy.cfg : listen stats 0.0.0.0:6427 mode http maxconn 10 no log acl network_allowed src 127.0.0.0/8 acl network_allowed src 10.0.0.0/8 tcp-request connection if if!network_allowed stats enable stats uri /从负载均衡器收集指标有标准的监控解决方案:datadog,signalfx,prometheus,graphite ... [2] 这些工具从应用程序,服务器和基础架构收集指标,它们允许检索指标,绘制图表并发送警报。 将负载平衡器集成到我们的监控系统中至关重要。我们需要了解客户端活动情况,请求数,错误率等... 毋庸置疑,监控能力将受限于负载均衡器测量到的信息。 可从nginx获得指标nginx只提供7种不同的指标。 Nginx仅在所有站点上给出总和。 单个站点或应用程序则没有任何数字对应。 活动连接:当前活动客户端连接数,包括等待连接。接受:接受的客户端连接总数。handling:已处理连接的总数。通常,参数值与accept 相同,除非已达到某些资源限制(例如,worker_connections限制)。请求:客户端请求的总数。读取:nginx正在读取请求头的当前连接数。写入:nginx将响应写回客户端的当前连接数。等待:等待请求的当前空闲客户端连接数。资料来源:https://nginx.org/en/docs/htt... HAProxy 提供的指标HAProxy提供83种不同的指标。 数字是全局,每个前端和每个后端(无论哪个有意义)。它们可在人类可读的网页上以原始CSV格式提供。 0. pxname [LFBS]:代理名称1. svname [LFBS]:服务名称(FRONTEND用于前端,BACKEND用于后端,任何名称用于服务器/侦听器)2. qcur [..BS]:当前排队的请求。对于后端,这将报告未分配服务器的队列号。3. qmax [..BS]:qcur的最大值4. scur [LFBS]:当前会话5. smax [LFBS]:最大会话6. slim [LFBS]:配置的会话限制7. stot [LFBS]:累计数连接8. bin [LFBS]:字节输入9. bout [LFBS]:字节输出[...] 32. 类型[LFBS] :( 0 =前端,1 =后端,2 =服务器,3 =套接字/监听器)33. rate [.FBS]:每秒的会话数超过最后一秒34. rate_lim [.F ..]:每秒新会话的配置限制35. rate_max [.FBS]:每秒新会话的最大数量36. check_status [... S]:上次健康检查的状态,其中一个:37. check_code [... S]:layer5-7代码,如果可用38. check_duration [... S]:以ms为单位完成上次健康检查所用的时间39. hrsp_1xx [.FBS]:带1xx代码的http响应40. hrsp_2xx [.FBS]:具有2xx代码的http响应41. hrsp_3xx [.FBS]:具有3xx代码42. http响应.hrsp_4xx [.FBS]:具有4xx代码的http响应43. hrsp_5xx [.FBS]:http响应5xx代码44. hrsp_other [.FBS]:与其他代码的http响应(协议错误)[...]资料来源:http://cbonte.github.io/hapro... ...

August 7, 2019 · 1 min · jiezi

借助URLOS快速安装swoole环境

环境需求最低硬件配置:1核CPU,1G内存(1+1)提示:如果你的应用较多,而主机节点的硬件配置较低,建议在部署节点时开通虚拟虚拟内存;生产环境建议使用2G或以上内存;推荐安装系统:Ubuntu-16.04、Ubuntu-18.04、CentOS7.X、Debian9X的64位的纯净的操作系统;URLOS安装curl -LO www.urlos.com/iu && sh iuswoole环境安装流程登录URLOS系统后台,在应用市场中搜索“swoole”,找到之后,选择合适的版本点击安装按钮 填写服务名称、选择运行节点、服务端口、选择智能部署 填写ssh密码(这里的密码是root密码) 然后点击“提交”按钮,等待部署完成;

July 15, 2019 · 1 min · jiezi

PHP源码学习20190409-FastCGI协议1

baiyan 全部视频:https://segmentfault.com/a/11... 计算机网络架构的分层与封装我们经常谈到,计算机网络有多种体系架构,如OSI七层模型、TCP/IP四层模型等等。那么,为什么要将计算机网络分成这么多层呢?而且,每一层都要加上其特有的头部(如TCP头部、IP头部等等)进行封装,这样设计的原因又何在?首先我们看一个我们经常看到的C/S架构数据流动过程图: 我们以TCP/IP四层网络体系架构为例,总结一下各层服务的作用:应用层:用户直接能够操作的层,处理应用程序的逻辑,在用户空间实现传输层:为两台计算机上的应用程序提供端到端的通信,实现了数据经过网络层到达计算机后能够分发到各个端口(分用),在内核空间实现网络层:提供精确到两端计算机互联网IP地址的通信,实现了数据包在互联网上的选路与转发,在内核空间实现数据链路层:提供基于物理媒介(如网卡)的数据传输服务,在内核空间实现首先谈谈为什么要分层。在我们实际的项目开发过程中,我们常常提到的模块化、服务化,其实和计算机网络为什么要分层的原理类似。我们可以将每一层都看成一个模块、一个服务,其内部的实现细节对于上一层或者下一层都是隐藏的,可能只对外暴露一些API而已。如果上层要使用下层提供的服务,根本不需要关注下一层内部的实现细节,只需使用下层提供的API即可。这样一来,方便了开发与维护,进而提高了计算机网络整体的运作效率。我们再谈为什么要封装。刚才我们谈到了每个模块都是独立的。上层为了使用下层提供的服务,必须封装。举个例子,应用层想使用传输层提供的端到端的数据传输服务,那么传输层就会将应用层下发的数据先存起来。为了实现端到端的数据传输,传输层模块内部需要标识双方的端口号。所以,它就会将端口号还有一些额外的信息(被称作(TCP/UDP)首部),和应用层下发的数据部分进行封装,一起传给下一层(即网络层)。这样,通过封装每一层特有的头部,实现了每一层独特的功能,最终实现了精确到端口号的端到端数据传输服务。为什么需要FastCGI协议在LNMP架构中,客户端浏览器与nginx代理是通过HTTP协议进行通信的。在请求到达nginx之后,数据最终会被转发给上游的PHP-FPM。它们之间的通信,属于同一机器上、不同端口号之间的通信。所以,它们也需要一个类似于HTTP的协议的、一种格式或语法上的规范与约定。这样一来,通信双方才能够更好地理解并解析对方传输的信息以及数据。这个协议就是FastCGI协议。它可以基于传输层TCP协议来实现。抓包接下来我们会以nginx与PHP-FPM之前通信的数据包为例,利用tcpdump抓取二者通信的数据包。所以我们首先需要了解一下各层数据报头部的格式,但是具体每个字段的作用,我们会在接下来详细讲解,先让我们熟悉一下:数据链路层(以太网帧为例) 网络层(IPv4协议为例) 传输层(TCP协议为例) 各层之间数据包的联系数据链路层是对网络层数据及头部的封装;网路层是对传输层数据及头部的封装;传输层是对应用层数据及头部的封装: 由于FastCGI协议基于TCP协议,那么它一定会进行三次握手与四次挥手,中间的数据包是双方的数据交换,全部的数据包如下:[root@VM_0_3_centos ~]# tcpdump -i lo port 9000 -S -XXtcpdump: verbose output suppressed, use -v or -vv for full protocol decodelistening on lo, link-type EN10MB (Ethernet), capture size 262144 bytes13:50:43.883490 IP VM_0_3_centos.33844 > VM_0_3_centos.cslistener: Flags [S], seq 608546013, win 43690, options [mss 65495,sackOK,TS val 961901286 ecr 0,nop,wscale 7], length 0 0x0000: 0000 0000 0000 0000 0000 0000 0800 4500 ..............E. 0x0010: 003c de3b 4000 4006 5e7e 7f00 0001 7f00 .<.;@.@.^~...... 0x0020: 0001 8434 2328 2445 acdd 0000 0000 a002 ...4#($E........ 0x0030: aaaa fe30 0000 0204 ffd7 0402 080a 3955 ...0..........9U 0x0040: 72e6 0000 0000 0103 0307 r.........13:50:43.883520 IP VM_0_3_centos.cslistener > VM_0_3_centos.33844: Flags [S.], seq 2973795481, ack 608546014, win 43690, options [mss 65495,sackOK,TS val 961901286 ecr 961901286,nop,wscale 7], length 0 0x0000: 0000 0000 0000 0000 0000 0000 0800 4500 ..............E. 0x0010: 003c 0000 4000 4006 3cba 7f00 0001 7f00 .<..@.@.<....... 0x0020: 0001 2328 8434 b140 8499 2445 acde a012 ..#(.4.@..$E.... 0x0030: aaaa fe30 0000 0204 ffd7 0402 080a 3955 ...0..........9U 0x0040: 72e6 3955 72e6 0103 0307 r.9Ur.....13:50:43.883541 IP VM_0_3_centos.33844 > VM_0_3_centos.cslistener: Flags [.], ack 2973795482, win 342, options [nop,nop,TS val 961901286 ecr 961901286], length 0 0x0000: 0000 0000 0000 0000 0000 0000 0800 4500 ..............E. 0x0010: 0034 de3c 4000 4006 5e85 7f00 0001 7f00 .4.<@.@.^....... 0x0020: 0001 8434 2328 2445 acde b140 849a 8010 ...4#($E...@.... 0x0030: 0156 fe28 0000 0101 080a 3955 72e6 3955 .V.(......9Ur.9U 0x0040: 72e6 r.13:50:43.883594 IP VM_0_3_centos.33844 > VM_0_3_centos.cslistener: Flags [P.], seq 608546014:608546982, ack 2973795482, win 342, options [nop,nop,TS val 961901286 ecr 961901286], length 968 0x0000: 0000 0000 0000 0000 0000 0000 0800 4500 ..............E. 0x0010: 03fc de3d 4000 4006 5abc 7f00 0001 7f00 ...=@.@.Z....... 0x0020: 0001 8434 2328 2445 acde b140 849a 8018 ...4#($E...@.... 0x0030: 0156 01f1 0000 0101 080a 3955 72e6 3955 .V........9Ur.9U 0x0040: 72e6 0101 0001 0008 0000 0001 0000 0000 r............... 0x0050: 0000 0104 0001 03a0 0000 0f35 5343 5249 ...........5SCRI 0x0060: 5054 5f46 494c 454e 414d 452f 6461 7461 PT_FILENAME/data 0x0070: 2f77 7777 2f68 7464 6f63 732f 6461 7461 /www/htdocs/data 0x0080: 2f77 7777 2f68 7464 6f63 732f 736e 6f2f /www/htdocs/sno/ 0x0090: 7075 626c 6963 2f69 6e64 6578 2e70 6870 public/index.php 0x00a0: 0c00 5155 4552 595f 5354 5249 4e47 0e03 ..QUERY_STRING.. 0x00b0: 5245 5155 4553 545f 4d45 5448 4f44 4745 REQUEST_METHODGE 0x00c0: 540c 0043 4f4e 5445 4e54 5f54 5950 450e T..CONTENT_TYPE. 0x00d0: 0043 4f4e 5445 4e54 5f4c 454e 4754 480b .CONTENT_LENGTH. 0x00e0: 0a53 4352 4950 545f 4e41 4d45 2f69 6e64 .SCRIPT_NAME/ind 0x00f0: 6578 2e70 6870 0b01 5245 5155 4553 545f ex.php..REQUEST_ 0x0100: 5552 492f 0c01 444f 4355 4d45 4e54 5f55 URI/..DOCUMENT_U 0x0110: 5249 2f0d 2b44 4f43 554d 454e 545f 524f RI/.+DOCUMENT_RO 0x0120: 4f54 2f64 6174 612f 7777 772f 6874 646f OT/data/www/htdo 0x0130: 6373 2f64 6174 612f 7777 772f 6874 646f cs/data/www/htdo 0x0140: 6373 2f73 6e6f 2f70 7562 6c69 630f 0853 cs/sno/public..S 0x0150: 4552 5645 525f 5052 4f54 4f43 4f4c 4854 ERVER_PROTOCOLHT 0x0160: 5450 2f31 2e31 0e04 5245 5155 4553 545f TP/1.1..REQUEST_ 0x0170: 5343 4845 4d45 6874 7470 1107 4741 5445 SCHEMEhttp..GATE 0x0180: 5741 595f 494e 5445 5246 4143 4543 4749 WAY_INTERFACECGI 0x0190: 2f31 2e31 0f0c 5345 5256 4552 5f53 4f46 /1.1..SERVER_SOF 0x01a0: 5457 4152 456e 6769 6e78 2f31 2e31 312e TWAREnginx/1.11. 0x01b0: 390b 0f52 454d 4f54 455f 4144 4452 3131 9..REMOTE_ADDR11 0x01c0: 332e 3232 372e 3234 392e 3132 370b 0552 3.227.249.127..R 0x01d0: 454d 4f54 455f 504f 5254 3533 3931 330b EMOTE_PORT53913. 0x01e0: 0a53 4552 5645 525f 4144 4452 3137 322e .SERVER_ADDR172. 0x01f0: 3136 2e30 2e33 0b02 5345 5256 4552 5f50 16.0.3..SERVER_P 0x0200: 4f52 5438 300b 0d53 4552 5645 525f 4e41 ORT80..SERVER_NA 0x0210: 4d45 6772 6170 652e 7961 662e 636f 6d0f MEgrape.yaf.com. 0x0220: 0352 4544 4952 4543 545f 5354 4154 5553 .REDIRECT_STATUS 0x0230: 3230 3009 0f48 5454 505f 484f 5354 3132 200..HTTP_HOST12 0x0240: 322e 3135 322e 3232 392e 3232 310f 0a48 2.152.229.221..H 0x0250: 5454 505f 434f 4e4e 4543 5449 4f4e 6b65 TTP_CONNECTIONke 0x0260: 6570 2d61 6c69 7665 1209 4854 5450 5f43 ep-alive..HTTP_C 0x0270: 4143 4845 5f43 4f4e 5452 4f4c 6d61 782d ACHE_CONTROLmax- 0x0280: 6167 653d 301e 0148 5454 505f 5550 4752 age=0..HTTP_UPGR 0x0290: 4144 455f 494e 5345 4355 5245 5f52 4551 ADE_INSECURE_REQ 0x02a0: 5545 5354 5331 0f79 4854 5450 5f55 5345 UESTS1.yHTTP_USE 0x02b0: 525f 4147 454e 544d 6f7a 696c 6c61 2f35 R_AGENTMozilla/5 0x02c0: 2e30 2028 4d61 6369 6e74 6f73 683b 2049 .0.(Macintosh;.I 0x02d0: 6e74 656c 204d 6163 204f 5320 5820 3130 ntel.Mac.OS.X.10 0x02e0: 5f31 355f 3029 2041 7070 6c65 5765 624b _15_0).AppleWebK 0x02f0: 6974 2f35 3337 2e33 3620 284b 4854 4d4c it/537.36.(KHTML 0x0300: 2c20 6c69 6b65 2047 6563 6b6f 2920 4368 ,.like.Gecko).Ch 0x0310: 726f 6d65 2f37 352e 302e 3337 3730 2e31 rome/75.0.3770.1 0x0320: 3030 2053 6166 6172 692f 3533 372e 3336 00.Safari/537.36 0x0330: 0b76 4854 5450 5f41 4343 4550 5474 6578 .vHTTP_ACCEPTtex 0x0340: 742f 6874 6d6c 2c61 7070 6c69 6361 7469 t/html,applicati 0x0350: 6f6e 2f78 6874 6d6c 2b78 6d6c 2c61 7070 on/xhtml+xml,app 0x0360: 6c69 6361 7469 6f6e 2f78 6d6c 3b71 3d30 lication/xml;q=0 0x0370: 2e39 2c69 6d61 6765 2f77 6562 702c 696d .9,image/webp,im 0x0380: 6167 652f 6170 6e67 2c2a 2f2a 3b71 3d30 age/apng,*/*;q=0 0x0390: 2e38 2c61 7070 6c69 6361 7469 6f6e 2f73 .8,application/s 0x03a0: 6967 6e65 642d 6578 6368 616e 6765 3b76 igned-exchange;v 0x03b0: 3d62 3314 0d48 5454 505f 4143 4345 5054 =b3..HTTP_ACCEPT 0x03c0: 5f45 4e43 4f44 494e 4767 7a69 702c 2064 _ENCODINGgzip,.d 0x03d0: 6566 6c61 7465 140e 4854 5450 5f41 4343 eflate..HTTP_ACC 0x03e0: 4550 545f 4c41 4e47 5541 4745 7a68 2d43 EPT_LANGUAGEzh-C 0x03f0: 4e2c 7a68 3b71 3d30 2e39 0104 0001 0000 N,zh;q=0.9...... 0x0400: 0000 0105 0001 0000 0000 ..........13:50:43.883602 IP VM_0_3_centos.cslistener > VM_0_3_centos.33844: Flags [.], ack 608546982, win 357, options [nop,nop,TS val 961901286 ecr 961901286], length 0 0x0000: 0000 0000 0000 0000 0000 0000 0800 4500 ..............E. 0x0010: 0034 f67c 4000 4006 4645 7f00 0001 7f00 .4.|@.@.FE...... 0x0020: 0001 2328 8434 b140 849a 2445 b0a6 8010 ..#(.4.@..$E.... 0x0030: 0165 fe28 0000 0101 080a 3955 72e6 3955 .e.(......9Ur.9U 0x0040: 72e6 r.13:50:43.885366 IP VM_0_3_centos.cslistener > VM_0_3_centos.33844: Flags [P.], seq 2973795482:2973795650, ack 608546982, win 357, options [nop,nop,TS val 961901288 ecr 961901286], length 168 0x0000: 0000 0000 0000 0000 0000 0000 0800 4500 ..............E. 0x0010: 00dc f67d 4000 4006 459c 7f00 0001 7f00 ...}@.@.E....... 0x0020: 0001 2328 8434 b140 849a 2445 b0a6 8018 ..#(.4.@..$E.... 0x0030: 0165 fed0 0000 0101 080a 3955 72e8 3955 .e........9Ur.9U 0x0040: 72e6 0106 0001 008d 0300 582d 506f 7765 r.........X-Powe 0x0050: 7265 642d 4279 3a20 5048 502f 372e 322e red-By:.PHP/7.2. 0x0060: 3132 0d0a 436f 6e74 656e 742d 5479 7065 12..Content-Type 0x0070: 3a61 7070 6c69 6361 7469 6f6e 2f6a 736f :application/jso 0x0080: 6e3b 2063 6861 7273 6574 3d75 7466 2d38 n;.charset=utf-8 0x0090: 0d0a 0d0a 7b22 7374 6174 7573 223a 3531 ....{"status":51 0x00a0: 342c 226d 7367 223a 2255 6e65 7863 6570 4,"msg":"Unexcep 0x00b0: 7465 6420 6120 656d 7074 7920 636f 6e74 ted.a.empty.cont 0x00c0: 726f 6c6c 6572 206e 616d 6522 2c22 6461 roller.name","da 0x00d0: 7461 223a 5b5d 7d00 0000 0103 0001 0008 ta":[]}......... 0x00e0: 0000 0000 0000 0077 5c2f .......w\/13:50:43.885378 IP VM_0_3_centos.33844 > VM_0_3_centos.cslistener: Flags [.], ack 2973795650, win 350, options [nop,nop,TS val 961901288 ecr 961901288], length 0 0x0000: 0000 0000 0000 0000 0000 0000 0800 4500 ..............E. 0x0010: 0034 de3e 4000 4006 5e83 7f00 0001 7f00 .4.>@.@.^....... 0x0020: 0001 8434 2328 2445 b0a6 b140 8542 8010 ...4#($E...@.B.. 0x0030: 015e fe28 0000 0101 080a 3955 72e8 3955 .^.(......9Ur.9U 0x0040: 72e8 r.13:50:43.885396 IP VM_0_3_centos.cslistener > VM_0_3_centos.33844: Flags [F.], seq 2973795650, ack 608546982, win 357, options [nop,nop,TS val 961901288 ecr 961901288], length 0 0x0000: 0000 0000 0000 0000 0000 0000 0800 4500 ..............E. 0x0010: 0034 f67e 4000 4006 4643 7f00 0001 7f00 .4.~@.@.FC...... 0x0020: 0001 2328 8434 b140 8542 2445 b0a6 8011 ..#(.4.@.B$E.... 0x0030: 0165 fe28 0000 0101 080a 3955 72e8 3955 .e.(......9Ur.9U 0x0040: 72e8 r.13:50:43.885667 IP VM_0_3_centos.33844 > VM_0_3_centos.cslistener: Flags [F.], seq 608546982, ack 2973795651, win 350, options [nop,nop,TS val 961901288 ecr 961901288], length 0 0x0000: 0000 0000 0000 0000 0000 0000 0800 4500 ..............E. 0x0010: 0034 de3f 4000 4006 5e82 7f00 0001 7f00 .4.?@.@.^....... 0x0020: 0001 8434 2328 2445 b0a6 b140 8543 8011 ...4#($E...@.C.. 0x0030: 015e fe28 0000 0101 080a 3955 72e8 3955 .^.(......9Ur.9U 0x0040: 72e8 r.13:50:43.885678 IP VM_0_3_centos.cslistener > VM_0_3_centos.33844: Flags [.], ack 608546983, win 357, options [nop,nop,TS val 961901288 ecr 961901288], length 0 0x0000: 0000 0000 0000 0000 0000 0000 0800 4500 ..............E. 0x0010: 0034 f67f 4000 4006 4642 7f00 0001 7f00 .4..@.@.FB...... 0x0020: 0001 2328 8434 b140 8543 2445 b0a7 8010 ..#(.4.@.C$E.... 0x0030: 0165 fe28 0000 0101 080a 3955 72e8 3955 .e.(......9Ur.9U 0x0040: 72e8 r.我们可以看到,前三个包就是TCP的三次握手,经过了一定量的数据传输之后,最后四个包就是TCP的四次挥手,我们可以用下图来进行表示: ...

July 15, 2019 · 7 min · jiezi

Nginx-镜像不同端口映射情形时重定向-uri-端口不正确

使用 docker 镜像 nginx:1.17.0-alpine 构建容器。将主机端口 8080 映射到容器的 80 端口,由于采用默认的配置访问目录名不加 / 时,不会返回其中的 index 内容,所以需要额外配置。如下的配置适用于同端口映射的情形,当宿主机的端口和容器的端口不一致时,访问 http://localhost:8080/abc, 则会重定向到 http://localhost/abc/, 这显然不是我们想要的结果。 listen 80; location / { index index.html index.htm; try_files $uri $uri/ =404; }于是我去问搜索引擎,终于找到了此情形下的配置。 location / { index index.html index.htm; } location ~ ^.*[^/]$ { try_files $uri @rewrite; } location @rewrite { return 302 $scheme://$http_host$uri/; }参考 https://serverfault.com/quest...

July 15, 2019 · 1 min · jiezi

Kong网关部署

Kong是一个使用了lua-nginx-module运行在Nginx之上的Lua应用。Kong是一个成熟的API网关解决方案。API 网关,即API Gateway,是大型分布式系统中,为了保护内部服务而设计的一道屏障,可以提供高性能、高可用的 API托管服务,从而帮助服务的开发者便捷地对外提供服务,而不用考虑安全控制、流量控制、审计日志等问题,统一在网关层将安全认证,流量控制,审计日志,黑白名单等实现。网关的下一层,是内部服务,内部服务只需开发和关注具体业务相关的实现。网关可以提供API发布、管理、维护等主要功能。开发者只需要简单的配置操作即可把自己开发的服务发布出去,同时置于网关的保护之下。 参考文档:https://konghq.com/ (kong官网) https://www.pocketdigi.com/bo...https://www.postgresql.org/ (postgresql官网)http://www.postgres.cn/index....环境:环境:Centos7配置:2c4g权限:root一、安装PostgreSQL注意:请勿使用"yum install kong-community-edition"安装Kong,必须指定版本号!"yum install kong-community-edition-0.14.1.*.noarch.rpm --nogpgcheck"1、配置yum源# 配置完yum库之后卸载之前安装的Postgresqlyum erase postgresql*# 删除遗留的数据rm -rf /var/lib/pgsql2、安装下载RPM(PostgreSQL YUM源),找到对应的版本 CentOS 7 - x86_64 # 安装yum源yum install https://download.postgresql.org/pub/repos/yum/9.6/redhat/rhel-7-x86_64/pgdg-centos96-9.6-3.noarch.rpm# 安装PostgreSQLyum install postgresql96-server postgresql96-contrib3、初始化数据库# 初始化数据库/usr/pgsql-9.6/bin/postgresql96-setup initdb4、PostgreSQL服务控制# PostgreSQL 使用systemctl作为服务托管service postgresql-9.6 start/stop/restart/reload# 或是systemctl start/stop/restart/status postgresql-9.6# 设置开机自启systemctl enable postgresql-9.65、卸载(顺便提供卸载PostgreSQL的命令)# 卸载PostgreSQLyum erase postgresql966、修改密码PostgreSQL数据库默认会创建一个Linux系统用户postgres,通过passwd命令可以设置密码。 # 创建postgres数据库账号su postgrespsqlALTER USER postgres WITH PASSWORD '123456';\qsu root7、设置远程控制7.1 修改vi /var/lib/pgsql/9.6/data/postgresql.conf文件,配置可以远程访问(正式环境按照白名单正确配置)将listen_addresses前的#去掉,并将 listen_addresses = 'localhost' 改成 listen_addresses = '*'; ...

July 14, 2019 · 2 min · jiezi

这是一份儿PHPer需要的远程开发环境不依赖Windows拥抱Linux

一般情况,开发者多使用Windows系统,PHPStorm、VSCode等软件让我们离不开Windows,但是,但是多数开发者更倾向于在Linux上部署环境。那么这一份教程就诞生了。(MacOS用户可以绕行)工具PHPStormUbuntu 16.04准备工作在Windows系统上安装PHPStorm和VM虚拟机,在虚拟机中安装Ubuntu系统。 在Ubuntu安装lnmp(Linux+Nginx+MySQL+PHP)集成环境 wget http://soft.vpser.net/lnmp/lnmp1.6.tar.gz -cO lnmp1.6.tar.gz && tar zxf lnmp1.6.tar.gz && cd lnmp1.6 && ./install.sh lnmp远程部署代码打开PHPStorm,选择Create New Project from Existing Files 选择从远程服务器ftp同步项目 输入项目名,并选择要同步到本地的项目路径 自动上传操作选择如下,当你Ctrl+S时,PHPStorm会帮你上传当前修改的文件到服务器。这样会相当方便。 选择新建远程服务器 填写项目名,Type选择SFTP,填写服务器IP、用户名、密码以及远程项目所在的路径。 //linux下查看ip命令(不是Windows的ipconfig)ghost@ghost-virtual-machine:~$ ifconfig 直接点finish,PHPStorm会自动同步远程服务器的代码。 远程debug安装xdebug扩展下载、编译xdebug wget http://www.xdebug.org/files/xdebug-2.2.3.tgztar xzf xdebug-2.2.3.tgzcd xdebug-2.2.3/usr/bin/phpize./configure --with-php-config=/usr/local/php/bin/php-configmakemake install查看php安装路径下的lib 库目录是否生成了xdebug.so文件。(我的目录:/usr/local/php/lib/php/extensions/xdebug.so) 然后配置/usr/local/php/etc/php.ini文件,需要注意的是xdebug是zend扩展,zend_extension= "xdebug.so",而不是extension= "xdebug.so"。 [xdebug]zend_extension= "xdebug.so"xdebug.profiler_enable = onxdebug.default_enable = onxdebug.trace_output_dir="/tmp/xdebug"xdebug.trace_output_name = trace.%c.%pxdebug.profiler_output_dir="/tmp/xdebug"xdebug.profiler_output_name="cachegrind.out.%s"xdebug.remote_enable =1xdebug.remote_handler = "dbgp"xdebug.remote_host = 10.0.100.236 //本机的ip,不是虚拟机或者远程服务器的ipxdebug.remote_mode = "req"xdebug.remote_port = 9001如果不知道本机的ip或本机为动态ip,需要加入xdebug.remote_connect_back,将其设置为1,此时xdebug.remote_host会失效。 ...

July 14, 2019 · 1 min · jiezi

如何使用confdACM管理Nginx配置

Nginx 作为优秀的开源软件,凭借其高性能高并发等特点,常常作为web和反向代理服务部署在生产环境中。但是当 Nginx 的规模较大时, Nginx 的运维成本也是不断上升。本文介绍如何通过confd+ACM来管理 Nginx 配置,通过集中式的配置管理方式解决 Nginx 的大规模运维问题,运维和开发人员不用登陆到 Nginx 机器上,只需要配置好confd,然后在ACM上操作就可以动态修改 Nginx 的配置参数。 准备工作在操作本文的示例之前需要配置好开通ACM和对confd的使用有基本概念,ACM的开通及其基本使用可以参考:这里confd的基本使用可以参考:这里 Nginx 在日常开发中使用得比较多的功能是负载均衡、限流、缓存等, Nginx 的使用和安装可以在网上查阅相关资料。本文结合负载均衡和限流功能讲解如何使用confd+ACM实现 Nginx 的大规模运维操作。 创建confd配置文件创建confd所需的toml格式配置文件 vim /etc/confd/conf.d/myapp.tomlcheck_cmd用于检验 Nginx 配置的正确性,当src配置错误则不会覆盖 Nginx 配置reload_cmd用于reload Nginx 配置 [template]src = " Nginx .conf.tmpl"dest = "/usr/local/ Nginx /conf/ Nginx .conf"keys = ["/myapp/ Nginx /conf",]check_cmd = "/usr/local/ Nginx /sbin/ Nginx -t -c {{.src}}"reload_cmd = "/usr/local/ Nginx /sbin/ Nginx -s reload"创建模版文件vim /etc/confd/templates/ Nginx .conf.tmplgetv从ACM中获取对应dataId的配置,/myapp/ Nginx /conf对应的dataId为myapp. Nginx .conf,配置格式为json格式,模版文件包含了 Nginx 的upstream、限流、黑白名单配置内容,通过json指令解析配置文件。upstream后端ip通过从ACM的配置的backends数组中获取,同样地,白名单和黑名单ip分别存储在whiteList和blackList的数组中,限流的速率和并发数通过rateLimit和connectionLimit设置 ...

July 12, 2019 · 2 min · jiezi

一套基础自动化部署搭建过程

问题背景公司初创技术团队,没有任何基础设施的情况下,需要搭建一系列code管理以及自动化部署等工具....所以引发了下面一系列的部署过程,历时两天,中间也是碰到各种问题,但最终把基本工具全部搭建成功,耶~,下面带大家一起看下此次搭建过程。 资源服务器一台,CentOS的,公司就给了一台配置较低的服务器当临时服务器,没办法了,就这么搞吧。 思考:如果我用传统的yum来安装,肯定会被我装乱七八糟,还不方便自己管理维护,左右为难的情况下我选择了Dokcer,可能有些小伙伴问Docker是啥怎么用,不要慌这里有传送门:Linux docker-compose 实战、 [进阶篇]docker编排PHP开发坏境测试环境搭建 为了快速搭建一套PHP测试环境我决定用laradock了,虽然文件很多,但是里面封装的东西也是比较全的,后期开发不知道会用到什么技术,就决定先用这个,随时可以启动用得到的服务。 laradock官方文档给的介绍也很全面,我这里采用的方式是部署多套项目方式目录结构如下: + laradock+ project-1+ project-2开始使用:git clone https://github.com/laradock/l...cp env-example .env env 里面的配置可以修改的,可以根据自己情况进行调整docker-compose up -d nginx php-fpm mysql redis 后面可以加上你要启动的程序,像rabbitmq、mongo等等,需要的时候追加在尾部就可以启动,首次启动时间有点长docker-compose exec --user=laradock workspace bash 像laravel等项目肯定少不了composer,执行这个命令进入工作区,就可以执行composer了docker-compose exec nginx nginx -s reload 肯定有人会问我更改了nginx配置是不是每次都要进入nginx容器去重启,或者把整个容器都重启了呀,不用的,执行这个命令就可以重启nginx了。nginx站点配置文件在哪里呢:./laradock/nginx/sites/先运行下试试吧。 GitLab现在运行环境已经搭建好了,我代码应该怎么存放呢,其实有很多的选择,要根据自己的实际情况出发,如:GitHub、码云、GitLab等等,我选择的是GitLab,刚开始没有发现laradock其实提供了GitLab服务。。只能自己折腾了,其实很简单。 docker \run -d \-p 443:443 \-p 8080:80 \-p 222:22 \--name gitlab \--restart always \-v /home/gitlab/config:/etc/gitlab \-v /home/gitlab/logs:/var/log/gitlab \-v /home/gitlab/data:/var/opt/gitlab \gitlab/gitlab-ce#参数解释:#-d:让容器后台运行#-p:暴露端口,把容器的443端口指向到宿主机443端口,宿主机8080->容器80,宿主机222->容器22#宿主机端口可以根据自己的情况自己定制#-name 给你的容器起个名,只要不和现有的重复就可以#--restart 当容器退出时docker是否重启#-v 这就是挂载磁盘了,把宿主机的目录挂载到容器中,这么做哪怕是容器坏了我的内容也不会丢失。#宿主机/home/gitlab/config目录挂载到容器中/etc/gitlab目录,宿主机目录根据自己情况定#gitlab/gitlab-ce 这个就是要启动的镜像,如果镜像不存在,docker会自动下载最新版容器启动成功之后会有一段时间来启动GitLab,看到启动成功立马访问是访问不到的,稍微等一下就可以了,配置文件都在你指定的宿主机目录下可以修改,需要修改的内容如下: gitlab_rails['gitlab_ssh_host'] = '宿主机IP'#宿主机的IP地址 gitlab_rails['gitlab_shell_ssh_port'] = 222#暴露给宿主机的ssh端口 external_url '域名'#分配给gitlab的域名,可以用nginx做反向代理到8080端口Jenkins实现自动化部署有很多种方式如:webhook、Jenkins、Travis CI等等,我的选择是Jenkins,因为之前部署用过所以这里依旧用了这个,laradock依旧提供了Jenkins服务,又是因为没发现自己搭建了一个。。。看来下次要先多看看在动手了。 ...

July 11, 2019 · 1 min · jiezi

从零到一实现前后端分离项目的gitlabci流程

?通过一周的尝试, 终于从0到1把gitlab-ci弄好了, 彻底抛弃travis-ci, 最大的坑还是墙外的东西太慢了, 总是timeout 整个过程分为如下几步: 如何在一个1核2G的云服务器上搭建gitlab: 十分钟搭建Gitlab使用gitlab-runner, 并选择正确的executor如何构建前端镜像如何构建后端镜像编写gitlab-ci.yml, 实现一个完整的前端后分离项目的构建部署1. 使用gitlab-runnergitlab-runner跟gitlab-ci是连体婴, 主要为gitlab-ci打工, 使用镜像的安装方式如下: docker run -d --name gitlab-runner --restart always \ -v /srv/gitlab-runner/config:/etc/gitlab-runner \ -v /var/run/docker.sock:/var/run/docker.sock \ gitlab/gitlab-runner:latest其中挂载卷/srv/gitlab-runner/config/config.toml包含了所有runner的配置信息. 通过挂载/var/run/docker.sock:/var/run/docker.sock,使得容器中的进程可以通过它与Docker守护进程通信 1.1 选择Docker作为runner的executor在启动了gitlab-runner容器后, 执行如下命令进入容器, 注册runner docker exec -it gitlab-runner /bin/bashroot@492ce6ab72f9:/# gitlab-runner register接下来需要填写的信息如下: Please enter the gitlab-ci coordinator URL:你的Gitlab地址: http(s)://gitlab.xxx.comPlease enter the gitlab-ci token for this runner:你的Gitlab admin/runners页面中的tokenPlease enter the gitlab-ci description for this runner:填写描述, 无关紧要Please enter the gitlab-ci tags for this runner (comma separated):填写标签, 没有标签谁都可以用, 是shared-runner, 有标签需要声明才可用, 回车就对了Please enter the executor: docker-ssh, ssh, docker+machine, kubernetes, docker-ssh+machine, docker, parallels, shell, virtualbox:选择你的executor: Docker应该是我观察到最常用的吧Please enter the default Docker image (e.g. ruby:2.6):选择一个默认镜像: 例如 docker:stable-alpine不出意外, 就能在gitlab中看到了 ...

July 11, 2019 · 3 min · jiezi

出现大量TIMEWAIT连接的排查与解决

Last-Modified: 2019年7月10日21:58:43 项目生产环境出现大量TIME_WAIT(数千个), 需要一一排查 先上总结: nginx 未开启 keep-alive 导致大量主动断开的tcp连接nginx 与 fastcgi(php-fpm) 的连接默认是短连接, 此时必然出现 TIME_WAIT状态确认统计TIME_WAIT 连接的本地地址 netstat -an | grep TIME_WAIT | awk '{print $4}' | sort | uniq -c | sort -n -k1# ... 前面很少的略过# 2 127.0.0.1:56420# 442 192.168.1.213:8080# 453 127.0.0.1:9000分析: 8080端口是nginx对外端口9000端口是php-fpm的端口8080 对外web端口经过确认, nginx 的配置文件中存在一行 # 不启用 keep-alivekeepalive_timeout 0;尝试抓取 tcp 包 tcpdump tcp -i any -nn port 8080 | grep "我的ip"# 其中某一次连接的输出如下# 20:52:54.647907 IP 客户端.6470 > 服务端.8080: Flags [S], seq 2369523978, win 64240, options [mss 1460,nop,wscale 8,nop,nop,sackOK], length 0# 20:52:54.647912 IP 服务端.8080 > 客户端.6470: Flags [S.], seq 1109598671, ack 2369523979, win 14600, options [mss 1460,nop,nop,sackOK,nop,wscale 7], length 0# 20:52:54.670302 IP 客户端.6470 > 服务端.8080: Flags [.], ack 1, win 256, length 0# 20:52:54.680784 IP 客户端.6470 > 服务端.8080: Flags [P.], seq 1:301, ack 1, win 256, length 300# 20:52:54.680789 IP 服务端.8080 > 客户端.6470: Flags [.], ack 301, win 123, length 0# 20:52:54.702935 IP 服务端.8080 > 客户端.6470: Flags [P.], seq 1:544, ack 301, win 123, length 543# 20:52:54.702941 IP 服务端.8080 > 客户端.6470: Flags [F.], seq 544, ack 301, win 123, length 0# 20:52:54.726494 IP 客户端.6470 > 服务端.8080: Flags [.], ack 545, win 254, length 0# 20:52:54.726499 IP 客户端.6470 > 服务端.8080: Flags [F.], seq 301, ack 545, win 254, length 0# 20:52:54.726501 IP 服务端.8080 > 客户端.6470: Flags [.], ack 302, win 123, length 0上述具体的ip已经被我批量替换了, 不方便暴露服务器ip分析: ...

July 10, 2019 · 3 min · jiezi

Nginx-rewrite配置规则

rewrite语法server { rewrite {规则} {定向路径} {重写类型} ;}1、规则:可以是字符串或者正则来表示想匹配的目标url2、定向路径:表示匹配到规则后要定向的路径,如果规则里有正则,则可以使用$index来表示正则里的捕获分组3、重写类型: last :相当于Apache里德(L)标记,表示完成rewrite,浏览器地址栏URL地址不变break;本条规则匹配完成后,终止匹配,不再匹配后面的规则,浏览器地址栏URL地址不变redirect:返回302临时重定向,浏览器地址会显示跳转后的URL地址permanent:返回301永久重定向,浏览器地址栏会显示跳转后的URL地址举例说明server { rewrite /last.html /index.html last; # 访问 /last.html 的时候,页面内容重写到 /index.html 中 rewrite /break.html /index.html break; # 访问 /break.html 的时候,页面内容重写到 /index.html 中,并停止后续的匹配 rewrite /redirect.html /index.html redirect; # 访问 /redirect.html 的时候,页面直接302定向到 /index.html中 rewrite /permanent.html /index.html permanent; # 访问 /permanent.html 的时候,页面直接301定向到 /index.html中 rewrite ^/html/(.+?).html$ /post/$1.html permanent; # 把 /html/*.html => /post/*.html ,301定向 rewrite ^/search\/([^\/]+?)(\/|$) /search.html?keyword=$1 permanent; # 把 /search/key => /search.html?keyword=key}last和break的区别: ...

July 9, 2019 · 1 min · jiezi

Nginx-配置根据请求IP末段进行分流

原文链接: 何晓东 博客 主要是 location 参数中的 if 判断的配置跳转,分流能减轻服务器的负载和压力,这种是一种非常常见的服务器部署架构。根据 IP 最后一段的范围来跳转 #域名,ip,端口等信息请自行修改upstream huaji-01.com { server 192.168.1.100:8080;}upstream huaji-02.com { server 192.168.1.200:8080;}server { listen 80; server_name www.huaji.com; location / { if ( $remote_addr ~* ^(.*)\.(.*)\.(.*)\.[1,125]$) { proxy_pass http://huaji-01.com; break; } proxy_pass http://huaji-02.com; }}以上为将 IP 末段为 1-125 的请求来源转发到 huaji-01.com,其他转向huaji-02.com,同样可以修改正则,例如规则: $remote_addr ~* ^(.*)\.(.*)\.(.*)\.*[0268]$ 末尾为0268这样的偶数ip,跳转到 huaji-01.com,其他跳转到第二个域名;规则:$remote_addr ~* ^(112)\.(.*)\.(.*)\.(.*)$ 开头为 112 的 IP 跳转到指定的域名;规则:$http_x_forwarded_for ~* ^(112)\.(.*)\.(.*)\.(.*)$ 根据 forward 地址段来分流,开头为 112 的跳转到指定域名 if 指令条件判断的含义: ...

July 9, 2019 · 1 min · jiezi

ngnixvuenodejsredis实现前后端分离的环境配置

一、 windows1. 安装配置nginx1.1. 下载安装1.2. 常用命令# 开启nginx start nginx nginx.exe# 停止nginx nginx.exe -s stop nginx.exe -s quit# 重启nginx nginx.exe -s reload1.3 配置`nginx`部分代码```# 反向代理前端vue和后端的node # 这是前端映射的端口 location / { proxy_pass http://localhost:8080; } # 后端node提供的api接口 location /api/ { proxy_pass http://localhost:8000; proxy_set_header Host $host; }```2. 安装配置redis1. 下载安装2. 常用命令运行打开一个 cmd 窗口 使用 cd 命令切换下载文件的根目录如: C:redis 运行:redis-server.exe redis.windows.conf这时候另启一个 cmd 窗口,原来的不要关闭,不然就无法访问服务端了。切换到 redis 目录下运行:redis-cli.exe -h 127.0.0.1 -p 6379[待修改]

July 8, 2019 · 1 min · jiezi

K8S-生态周报-2019070120190707

「K8S 生态周报」内容主要包含我所接触到的 K8S 生态相关的每周值得推荐的一些信息。欢迎订阅知乎专栏「k8s生态」。Kubernetes v1.16 发布周期开始随着前段时间 Kubernetes v1.15 的发布,v1.16 的发布周期开始了。本次的发布周期一如往常,本月底增强功能冻结,下月底代码冻结,9 月初完善文档,计划在 9 月中发布 v1.16 版本。 其实按这个节奏看得话,大家如果需要维护生产中的 Kubernetes 集群的话,还是尽快测试验证并完成升级,以免所用版本 EOL,带来一些其他的问题。 Knative Serving v0.7.x 发布本周 Knative Serving 发布了 v0.7.1 版本,Knative 近期的开发还是比较活跃的。 需要注意的是若使用 v0.7.x 版本中新增的 serving.knative.dev/v1beta1 API 的话,则需要 Kubernetes v1.14 版本以上。具体原因请参考 #4533 Non-root 容器:在这个版本中所有发布的容器均以非 root 用户运行,这使得我们可以使用更严格的 PSP。 当然此版本中也包含一些破坏性变更,比如 status 字段废弃。 关于此版本更多的细节请参考 ReleaseNote Debian 10 buster 正式发布Debian 10 正式发布了,其实按一般的角度来看,Linux 的一个发行版发布不会出现在 K8S 生态周报中的。 但这里有个需要注意的点,对于使用此版本部署 Kubernetes 时,需要注意一下。此版本中使用的 systemd 版本是 241.5 而这个版本中有个对于使用 Kubernetes 而言值得注意的点。 ...

July 8, 2019 · 2 min · jiezi

Nginx介绍和使用

Nginx介绍和使用一、介绍Nginx是一个十分轻量级并且高性能HTTP和反向代理服务器,同样也是一个IMAP/POP3/SMTP代理服务器。 二、特性HTTP服务器反向代理服务器简单的负载均衡和容错支持热部署三、nginx模块nginx模块一般分为三类: handler:负责处理客户端请求并产生待响应内容。filter:负责对输出的内容进行处理,可以对输出进行修改。upstream:实现反向代理功能,将真正的请求转发到后端服务器上,并从后端服务器上读取响应,发回客户端。upstream模块是一种特殊的handler,只不过响应内容不是真正由自己产生的,而是从后端服务器上读取的。四、ubuntu安装nginxsudo apt-get install nginx这种方式安装的文件位置: /usr/sbin/nginx:主程序 /etc/nginx:存放配置文件 /usr/share/nginx:存放静态文件 /var/log/nginx:存放日志 通过这种方式安装的,会自动创建服务,会自动在/etc/init.d/nginx新建服务脚本,然后就可以使用sudo service nginx {start|stop|restart|reload|force-reload|status|configtest|rotate|upgrade}的命令启动。 可以再/var/log/nginx/下查看日志,如果端口80被占用,就更改/etc/nginx/sites-enabled/default文件,将下面的两个80改成你想要的的端口,然后重新启动。 19 20 server { 21 listen 80 default_server; 22 listen [::]:80 default_server ipv6only=on;五、配置nginx作为http服务器1. 配置项目的conf文件在/etc/nginx/nginx.conf中可以看到自定义配置文件的路径: 71 include /etc/nginx/conf.d/*.conf; 72 include /etc/nginx/sites-enabled/*; 73 }在conf.d目录下新建文件timeline.conf,写入配置内容 # HTTP Serverserver { listen 8080; server_name bonnenuit.vip www.bonnenuit.vip; location / { alias /home/wangjun/tomcat8/webapps/timeline/pages/; index index.html; }}重启nginxsudo service nginx restart 2. 通过浏览器访问http://bonnenuit.vip:8080/ 如果显示正常,则说明配置成功。 3. 遇到的问题1. 报错"server" directive is not allowed here in /etc/nginx/myconf/timeline.conf:3 ...

July 3, 2019 · 1 min · jiezi

Nginx-命令行参数

-? | -h — 打印命令行参数的帮助-c file — 使用一个文件作为配置而不是默认配置文件-g directives — 设置全局配置的指令,例如nginx -g "pid /var/run/nginx.pid; worker_processes sysctl -n hw.ncpu;"-p prefix — 设置 nginx 路径前缀,即保存服务器文件的目录 (默认值为 /usr/local/nginx)-q — 在配置测试期间抑制非错误消息-s signal — 向 master 进程发送信号,参数信号可以是以下几种: stop — 立即关闭quit — 优雅的关闭,即退出前完成已经接收的连接请求reload — 重载配置文件,使用新配置开启心 worker 进程,正常关闭旧 worker 进程reopen — 重新打开日志文件-t — 测试配置文件: nginx 会检查配置是否有正确的语法,然后尝试打开配置中引入的文件-T — 和 -t 一样, 但另外将配置文件转储到标准输出 (1.9.2)-v — 打印 nginx 版本-V — 打印 nginx 版本, 编译器版本及配置参数参考链接:nginx command line parameters ...

July 3, 2019 · 1 min · jiezi

Nginx-location匹配规则

以下列配置为例 server { listen 80; server_name jouypub.com; location ^~ /. { return 404; } location ^~ /api { proxy_pass http://localhost:8000; } location / { root /services/apps/front/; }}location语法规则: location [=|~|~*|^~] /uri/ { … }= 开头表示精确匹配^~ 开头表示uri以某个常规字符串开头,理解为匹配 url路径即可~ 表示区分大小写的正则匹配~* 表示不区分大小写的正则匹配!~和!~* 分别为区分大小写不匹配及不区分大小写不匹配 的正则/ 通用匹配,任何请求都会匹配到。 如果匹配规则以^开头,就是匹配以指定字符串开头的路径,如果没有就是匹配url中的内容是否包含指定字符串如果匹配规则以$结尾,就是匹配以指定字符串结尾的路径 多个location配置的情况下匹配顺序为(当有匹配成功时候,停止匹配,按当前匹配规则处理请求): 优先匹配 =其次匹配 ^~按照文件中的匹配顺序执行最后匹配 /举例1、必选规则 location / { root /services/apps/front/;}2、匹配静态资源 location ^~ /static/ { root /services/apps/front/static;}location ~* \.(gif|jpg|jpeg|png|css|js|ico)$ { root /webroot/res/;}3、防盗链 location ~* \.(gif|jpg|swf)$ { valid_referers none blocked jouypub.com files.jouypub.com; if ($invalid_referer) { rewrite ^/ http://$host/logo.png; }}jouypub.com、files.jouypub.com是运行出现的白名单 ...

July 2, 2019 · 1 min · jiezi

Nginx-层面配置基础用户验证

原文链接: 何晓东 博客 应用场景:大概是在内部网站需要外部用户访问到,同时不能给访问者网站账号权限,所以在 nginx 层面进行限制。例如外包项目,内部员工有账号进行文档的操作,外包员工没有内部账号,但需要让他们能够看到文档,所以在 nginx 层面设置用户验证是最佳最简单的选择,多数情况下雇主方不会给外包员工开一个基础访问权限的账号。在 nginx 层面进行进行用户认证的前置条件:需要有对应的密码创建程序,如apache2-utils(Debian,Ubuntu)或 httpd-tools(RHEL / CentOS / Oracle Linux),不同操作系统是不同的软件。 创建账户密码文件使用命令 sudo htpasswd -c /etc/apache2/.htpasswd user1 创建第一个账户,然后按下 Enter 键输入密码,同样的命令,没有 -c 参数创建第二个用户及密码, -c 参数为创建文件,在第二次及以后的命令中不需要再次创建文件。确认一下文件及账号信息生成成功,使用命令 cat /etc/apache2/.htpasswd 查看文件内容,应该为账号及加密后的密码,如:user1:$apr1$/woC1jnP$KAh0SsVn5qeSMjTtn0E9Q0 等。配置 nginx 进行 http 基础用户验证使用 auth_basic 指令指定设置受保护区域的名称,此名称会显示在账号密码弹窗上,使用 auth_basic_user_file 指令设置带有账户密码信息的 .htpasswd 路径。例如配置: location /api { auth_basic "Administrator's Area"; auth_basic_user_file /etc/apache2/.htpasswd; }此外,如果某个区块不想继承整个认证体系,可以在区块内设置 auth_basic off,即用户认证关闭状态。例如配置: server { ... auth_basic "Administrator's Area"; auth_basic_user_file conf/htpasswd; location /public/ { auth_basic off; }}通过 ip 地址将认证与访问限制相结合HTTP基本认证可以通过IP地址有效地与访问限制相结合。您可以实现至少两种方案: ...

July 1, 2019 · 1 min · jiezi

十几位资深架构师整理了2019最新架构师学习体系分享给大家

不管是开发、测试、运维,每个技术人员心里都有一个成为技术大牛的梦,毕竟“梦想总是要有的,万一实现了呢”!正是对技术梦的追求,促使我们不断地努力和提升自己。 然而“梦想是美好的,现实却是残酷的”,很多同学在实际工作后就会发现,梦想是成为大牛,但做的事情看起来跟大牛都不沾边, 例如: 程序员说“天天写业务代码还加班,如何才能成为技术大牛” 测试说“每天都有执行不完的测试用例” 运维说“扛机器接网线敲shell命令,这不是我想要的运维人生” 提升技术的误区: 有人认为想成为技术大牛最简单直接、快速有效的方式是“拜团队技术大牛为师”,让他们平时给你开小灶,给你分配一些有难度的任务。 有这种想法是错误的,主要有这几个原因: 1、首先,大牛是很忙的,一个团队里面,如果大牛平时经常给你开小灶,难免会引起其他团队成员的疑惑,我个人认为如果团队里的大牛如果真正有心的话,多给团队培训是最好的。然而做过培训的都知道,准备一场培训是很耗费时间的,课件和材料至少2个小时(还不能是碎片时间),讲解1个小时,大牛们一个月做一次培训已经是很高频了。在此我向大家推荐一个架构学习交流圈。交流学习企鹅圈号:948368769 里面会分享一些资深架构师录制的视频录像:有Spring,MyBatis,Netty源码分析,高并发、高性能、分布式、微服务架构的原理,JVM性能优化、分布式架构等这些成为架构师必备的知识体系。还能领取免费的学习资源,目前受益良多 2、大牛不多,不太可能每个团队都有技术大牛,只能说团队里面会有比你水平高的人,即使他每天给你开小灶,最终你也只能提升到他的水平;而如果是跨团队的技术大牛,由于工作安排和分配的原因,直接请教和辅导的机会是比较少的,单凭参加几次大牛的培训,是不太可能就成为技术大牛的。 学习方式 如何想办法真正的提升自己:more and more 做的更多,做的比你主管安排给你的任务更多。熟悉更多业务,不管是不是你负责的;熟悉更多代码,不管是不是你写的 这样做有很多好处,举几个简单的例子: 1:需求分析的时候更加准确,能够在需求阶段就识别风险、影响、难点 2:问题处理的时候更加快速,因为相关的业务和代码都熟悉,能够快速的判断问题可能的原因并进行排查处理 3:方案设计的时候考虑更加周全,由于有对全局业务的理解,能够设计出更好的方案 4:找到正确的学习路线 一、构成架构师的技能体系 二、阅读源码,分析源码知识点总汇 源码分析专题详细介绍了源码中所用到的经典设计思想及常用设计模式,先打好内功基础,了解大牛是如何写代码的,从而吸收大牛的代码功力。 结合Spring5和MyBatis源码,带你理解作者框架思维,帮助大家寻找分析源码的切入点,在思想上来一次巨大的升华。 三、分布式架构技能学习有了大牛的代码功底之后,接下来可以更好地学习分布式架构技术。 分布式架构的好处和优点---->必然性,适应市场需求,能够去找一些更大的平台发展,提升自己的综合技术能力和薪资。 从分布式架构原理,到分布式架构策略,再到分布式架构中间件,最后会有分布式架构实战,让程序员可以在技术深度和技术广度上得到飞跃的提升,成为互联网行业所需要的T型人才。 四、微服务架构技能总汇随着业务的发展,代码量的膨胀和团队成员的增加,传统单体式架构的弊端越来越凸显,严重制约了业务的快速创新和敏捷交付。为了解决传统单体架构面临的挑战,先后演进出了SOA服务化架构、RPC框架、分布式服务框架,最后就是当今非常流行的微服务架构。微服务化架构并非银弹,它的实施本身就会面临很多陷阱和挑战,涉及到设计、开发、测试、部署、运行和运维等各个方面,一旦使用不当,则会导致整个微服务架构改造的效果大打折扣,甚至失败。 五、并发编程从Java基础接触多线程,到分布式架构环境下的高并发访问,并发编程充分利用好各个服务器处理器,以最高的效率处理各个任务协同有序工作。透彻理解锁的应用 六、优化调优大家都知道,这个一直是让程序员比较头疼的问题。当系统架构变得复杂而庞大之后,xing能方面就会下降,如果想成为一名优秀的架构师,xing能优化就是你必须思考的问题。 七、Java开发必知工具一名优秀的架构师必须有适合自己的兵器,也就是工欲善其事必先利其器,不管是小白,还是资深开发,都需要先选择好的工具。工程化专题的学习能帮助你和团队提升开发效率,让自己有更多时间来思考。 Git:可以更好地管理你和你团队的代码。 Maven:可以更好地管理jar包和项目的构建等。 Jenkins:可以更好地持续编译,集成,发布你的项目。在此我向大家推荐一个架构学习交流圈。交流学习企鹅圈号:948368769 里面会分享一些资深架构师录制的视频录像:有Spring,MyBatis,Netty源码分析,高并发、高性能、分布式、微服务架构的原理,JVM性能优化、分布式架构等这些成为架构师必备的知识体系。还能领取免费的学习资源,目前受益良多 Sonar:一个开源的代码质量分析平台,便于管理代码的质量,可检查出项目代码的漏洞和潜在的逻辑问题(提升代码的质量,更加高效地提升开发效率)。 八、实践一个双十一电商项目电商项目目的是把所学的分布式,微服务,性能调优等知识运用起来,只有在项目中你才能巩固知识,提升自己。实践电商项目会利用云服务器搭建真实的开发和部署环境,让你从零到项目实战,体验真实的企业级项目开发过程,让你具备独立开发和搭建分布架构系统的能力。 总结要想有机会,首先你得从人群中冒出来,要想冒出来,你就必须做到与众不同,要做到与众不同,你就要做得更多! 成为技术大牛梦想虽然很美好,但是要付出很多,不管是Do more还是Do better还是Do exercise,都需要花费时间和精力,这个过程中可能很苦逼,也可能很枯燥,这里我想特别强调一下:前面我讲的都是一些方法论的东西,但真正起决定作用的,其实还是我们对技术的热情和兴趣!

July 1, 2019 · 1 min · jiezi

2019淘宝OceanBase分布式系统负载均衡案例分享

摘要:Heroku的问题让我们意识到,在负载均衡测试时发现问题并妥善解决的成功经验有没有?于是,挖掘出“淘宝在双十一压测OB时发现存在严重的随机访问导致负载不均问题,并通过加权算法妥善解决”的成功案例,也就是本文。 在CSDN云计算频道日前所做的文章《响应高达6秒 用户揭露Heroku私自修改路由造成高支出》中,网友们认为这是“因随机调度+Rails的单线程处理导致延迟增加的负载均衡失败的案例”。但在负载均衡测试时就能发现问题并妥善解决的成功经验有没有?在随后的微博中,支付宝的@Leverly评论:“去年双11前的压测OB就发现了存在严重的随机访问导致负载不均问题,还好通过加权算法很好的解决了。” 引发了我们的关注,于是有了本文。重点是淘宝在“双十一”背后,OceanBase分布式系统负载均衡的经验分享。 云计算所具备的低成本、高性能、高可用性、高可扩展性等特点与互联网应用日益面临的挑战不谋而合,成为近年来互联网领域的热门话题。作为一名技术人员不难理解在云计算的底层架构中,分布式存储是不可或缺的重要组成部分。国外知名的互联网公司如Google、Amazon、Facebook、Microsoft、Yahoo等都推出了各自的分布式存储系统,在国内OceanBase是淘宝自主研发的一个支持海量数据的高性能分布式数据库系统,实现了数千亿条记录、数百TB数据上的跨行跨表事务[1]。 在分布式系统中存在着著名的“短板理论”[2],一个集群如果出现了负载不均衡问题,那么负载最大的机器往往将成为影响系统整体表现的瓶颈和短板。为了避免这种情况的发生,需要动态负载均衡机制,以达到实时的最大化资源利用率,从而提升系统整体的吞吐。在此我向大家推荐一个架构学习交流圈。交流学习企鹅圈号:948368769 里面会分享一些资深架构师录制的视频录像:有Spring,MyBatis,Netty源码分析,高并发、高性能、分布式、微服务架构的原理,JVM性能优化、分布式架构等这些成为架构师必备的知识体系。还能领取免费的学习资源,目前受益良多 本文将结合OceanBase的实际应用和大家分享一个去年淘宝双十一前期的准备工作中遇到负载均衡相关案例,抛砖引玉,期望对大家的工作有所启发。 OceanBase架构介绍OceanBase是一个具有自治功能的分布式存储系统,由中心节点RootServer、静态数据节点ChunkServer、动态数据节点UpdateServer以及数据合并节点MergeServer四个Server构成[1],如图1所示。 Tablet:分片数据,最基本的存储单元,一般会存储多份,一个Table由多个tablet构成; RootServer:负责集群机器的管理、Tablet定位、数据负载均衡、Schema等元数据管理等。 UpdateServer:负责存储动态更新数据,存储介质为内存和SSD,对外提供写服务; ChunkServer:负责存储静态Tablet数据,存储介质为普通磁盘或者SSD。 MergeServer:负责对查询中涉及多个Tablet数据进行合并,对外提供读服务; 在一个集群中,Tablet的多个副本分别存储在不同的ChunkServer,每个ChunkServer负责一部分Tablet分片数据,MergeServer和ChunkServer一般会一起部署。 双十一前期准备 对于淘宝的大部分应用而言,“双十一”就是一年一度的一次线上压测。伴随流量不断刷新着历史新高,对每个系统的可扩展性提出了很大的挑战。为了迎战双十一各产品线对有可能成为瓶颈部分的流量进行预估和扩容成为刻不容缓的任务。在本文要分享的案例中,应用方根据历史数据预估读请求的访问峰值为7w QPS,约为平时的5-6倍,合计每天支持56亿次的读请求。当时OceanBase集群部署规模是36台服务器,存储总数据量为200亿行记录,每天支持24亿次的读请求。 当前集群的读取性能远不能满足需求,我们首先进行了一次扩容,上线了10台Chunkserver/Mergeserver服务器。由于OceanBase本身具有比较强的可扩展性,为集群加机器是一件非常简单的操作。中心节点Rootserver在新机器注册上线后,会启动Rebalance功能以Tablet为单位对静态数据进行数据迁移,见下图的示意,最终达到所有ChunkServer上数据分片的均衡分布。 扩容完成后引入线上流量回放机制进行压力测试,以验证当前集群的性能是否可以满足应用的双十一需求。我们使用了10台服务器,共2000-4000个线程并发回放线上读流量对集群进行压测,很快发现集群整体的QPS在达到4万左右后,压测客户端出现大量超时现象,平均响应延迟已经超过阈值100ms,即使不断调整压力,系统的整体QPS也没有任何增大。此时观察整个集群机器的负载状态发现只有极个别服务器的负载超高,是其他机器的4倍左右,其他机器基本处于空闲状态,CPU、网络、磁盘IO都凸现了严重的不均衡问题。 负载不均衡导致了整体的吞吐取决于负载最高的那台Server,这正是前文提到的典型 “短板理论”问题。 负载不均问题跟踪客户端连接到OceanBase之后一次读请求的读流程如下图所示: Client 从RootServer获取到MergeServer 列表; Client将请求发送到某一台MergeServer; MergeServer从RootServer获取请求对应的ChunkServer位置信息; MergeServer将请求按照Tablet拆分成多个子请求发送到对应的ChunkServer; ChunkServer向UpdateServer请求最新的动态数据,与静态数据进行合并; MergeServer合并所有子请求的数据,返回给Client; OceanBase的读请求流程看起来如此复杂,实际上第1步和第3步中Client与RootServer以及MergeServer与RootServer的两次交互会利用缓存机制来避免,即提高了效率,同时也极大降低了RootServer的负载。 分析以上的流程可知,在第2步客户端选择MergeServer时如果调度不均衡会导致某台MergeServer机器过载;在第4步MergeServer把子请求发送到数据所在的ChunkServer时,由于每个tablet会有多个副本,选择副本的策略如果不均衡也会造成ChunkServer机器过载。由于集群部署会在同一台机器会同时启动ChunkServer和MergeServer,无法简单区分过载的模块。通过查看OceanBase内部各模块的提供的监控信息比如QPS、Cache命中率、磁盘IO数量等,发现负载不均问题是由第二个调度问题引发,即MergeServer对ChunkServer的访问出现了不均衡导致了部分ChunkServer的过载。 ChunkServer是存储静态Tablet分片数据的节点,分析其负载不均的原因包含如下可能: 数据不均衡: ChunkServer上数据大小的分布是不均衡的,比如某些节点因为存储Tablet分片数据量多少的差异性而造成的不均衡; 流量不均衡:数据即使是基本均衡的情况下,仍然会因为某些节点存在数据热点等原因而造成流量是不均衡的。 通过对RootServer管理的所有tablet数据分片所在位置信息Metadata进行统计,我们发现各个ChunkServer上的tablet数据量差异不大,这同时也说明扩容加入新的Server之后,集群的Rebalance是有效的(后来我们在其他应用的集群也发现了存在数据不均衡问题,本文暂不解释)。 尽管排除了数据不均衡问题,流量不均衡又存在如下的几种可能性: 存在访问热点:比如热销的商品,这些热点数据会导致ChunkServer成为访问热点,造成了负载不均; 请求差异性较大:系统负载和处理请求所耗费的CPUMemory磁盘IO资源成正比,而资源的耗费一般又和处理的数据量是成正比的,即可能是因为存在某些大用户而导致没有数据访问热点的情况下,负载仍然是不均衡的。 经过如上的分析至少已经确定ChunkServer流量不均衡问题和步骤4紧密相关的,而目前所采用的tablet副本选择的策略是随机法。一般而言随机化的负载均衡策略简单、高效、无状态,结合业务场景的特点进行分析,热点数据所占的比例并不会太高,把ChunkServer上的Tablet按照访问次数进行统计也发现并没有超乎想象的“大热点”,基本服从正太分布。在此我向大家推荐一个架构学习交流圈。交流学习企鹅圈号:948368769 里面会分享一些资深架构师录制的视频录像:有Spring,MyBatis,Netty源码分析,高并发、高性能、分布式、微服务架构的原理,JVM性能优化、分布式架构等这些成为架构师必备的知识体系。还能领取免费的学习资源,目前受益良多 可见热点Tablet虽访问频率稍高对负载的贡献率相对较大,但是热点tablet的占比很低,相反所有非热点tablet对负载的贡献率总和还是很高的,这种情况就好比“长尾效应”[3]。 负载均衡算法设计如果把热点ChunkServer上非热点Tablet的访问调度到其他Server,是可以缓解流量不均问题的,因此我们设计了新的负载均衡算法为:以实时统计的ChunkServer上所有tablet的访问次数为Ticket,每次对Tablet的读请求会选择副本中得票率最低的ChunkServer。 同时考虑到流量不均衡的第二个原因是请求的差异较大问题,ChunkServer对外提供的接口分为Get和Scan两种,Scan是扫描一个范围的所有行数据,Get是获取指定一行数据,因此两种访问方式的次数需要划分赋予不同的权重(,)参与最终Ticket的运算: 除此之外,简单的区分两种访问模式还是远远不够的,不同的Scan占用的资源也是存在较大差异的,引入平均响应时间(avg_time)这个重要因素也是十分必要的: 负载均衡算法要求具有自适应性和强的实时性,一方面新的访问要实时累积参与下次的负载均衡的调度,另一方面历史权重数据则需要根据统计周期进行非线性的衰减(y 衰减因子),减少对实时性的影响: 采用新的算法后,很好的缓解了负载不均衡的问题,整体负载提升了1倍,整体QPS吞吐提升到了8w。 ...

July 1, 2019 · 1 min · jiezi

RageFrame-一个-Yii2-AdminLET-免费开源多商户通用后台管理系统

RageFrame 2.0为二次开发而生,让开发变得更简单 项目地址:https://github.com/jianyan74/... 前言这是一款现代化、快速、高效、便捷、灵活、方便扩展的应用开发骨架。 RageFrame创建于2016年4月16日,一个基于Yii2高级框架的快速开发引擎,目前正在成长中,目的是为了集成更多的基础功能,不在为相同的基础功能重复制造轮子,开箱即用,让开发变得更加简单。 2018年9月10日 2.0版本正式上线,经过1.0版本一年多的开源反馈磨合,以更加优秀的形态出现。对1.0的版本进行了重构优化完善,更好的面向开发者进行二次开发。2.3.x版本更是优化了底层突出了服务层,分离业务逻辑,支持多商户。 特色极强的可扩展性,应用化,模块化,插件化机制敏捷开发。极致的插件机制,系统内的系统,安装和卸载不会对原来的系统产生影响,强大的功能完全满足各阶段的需求,支持用户多端访问(后台、微信、Api、前台等),系统中的系统。极完善的RBAC权限控制管理、无限父子级权限分组、可自由分配子级权限,且按钮/链接/自定义内容/插件等都可加入权限控制。只做基础底层内容,不会在上面开发过多的业务内容,满足绝大多数的系统二次开发。多入口模式,多入口分为 backend(后台)、frontend(PC前端),wechat(微信),api(对内接口),oauth2 server(对外接口),不同的业务,不同的设备,进入不同的入口。对接微信公众号且支持小程序,使用了一款优秀的微信非官方SDK Easywechat 4.x,开箱即用,预置了绝大部分功能,大幅度的提升了微信开发效率。整合了第三方登录,目前有QQ、微信、微博、GitHub等等。整合了第三方支付,目前有微信支付、支付宝支付、银联支付,二次封装为网关多个支付一个入口一个出口。整合了RESTful API,支持前后端分离接口开发和app接口开发,可直接上手开发业务。一键切换云存储,本地存储、腾讯COS、阿里云OOS、七牛云存储都可一键切换,且增加其他第三方存储也非常方便。全面监控系统报错,报错日志写入数据库,方便定位错误信息。快速高效的Servises(服务层),遵循Yii2的懒加载方式,只初始化使用到的组件服务。丰富的表单控件(时间、日期、时间日期、日期范围选择、颜色选择器、省市区三级联动、省市区勾选、单图上传、多图上传、单文件上传、多文件上传、百度编辑器、图表、多文本编辑框、地图经纬度选择器、图片裁剪上传、TreeGrid)和组件(二维码生成、Curl、IP地址转地区),快速开发,不必在为基础组件而担忧。完善的文档和辅助类,方便二次开发与集成。思维导图 开始之前具备 PHP 基础知识具备 Yii2 基础开发知识具备 开发环境的搭建仔细阅读文档,一般常见的报错可以自行先解决,解决不了在来提问\如果要做小程序或微信开发需要明白微信接口的组成,自有服务器、微信服务器、公众号(还有其它各种号)、测试号、以及通信原理(交互过程)如果需要做接口开发(RESTful API)了解基本的 HTTP 协议,Header 头、请求方式(GET\POST\PUT\PATCH\DELETE)等能查看日志和Debug技能一定要仔细走一遍文档Demo地址:http://demo2.rageframe.com/ba... 账号:demo 密码:123456 官网http://www.rageframe.com 文档安装文档 · 本地文档 · 更新历史 · 常见问题 问题反馈在使用中有任何问题,欢迎反馈给我,可以用以下联系方式跟我交流 QQ群:655084090 Github:https://github.com/jianyan74/... 特别鸣谢感谢以下的项目,排名不分先后 Yii:http://www.yiiframework.com EasyWechat:https://www.easywechat.com Bootstrap:http://getbootstrap.com AdminLTE:https://adminlte.io 版权信息RageFrame遵循Apache2开源协议发布,并提供免费使用。 本项目包含的第三方源码和二进制文件之版权信息另行标注。 版权所有Copyright © 2016-2019 by RageFrame www.rageframe.com All rights reserved。

July 1, 2019 · 1 min · jiezi

从Django部署中学到的

修改pip的源 pip 的配置文件在 ~/.pip/pip.conf 文件内容如下: [global]index-url = http://mirrors.tencentyun.com/pypi/simpletrusted-host = mirrors.tencentyun.com豆瓣源的网址是: http://pypi.doubanio.com/simple/ 只需将 index-url = http://mirrors.tencentyun.com... trusted-host = mirrors.tencentyun.com 替换为: Index-url =http://pypi.doubanio.com/simple/ trusted-host = pypi.doubanio.com 即可。 杀死进程 例子: fuser -k 9090/tcp 上线typeidea 项目 我写的是一个django项目,使用uwsgi + nginx 因为上次上线时间久远,而且我也不了解nginx的配置文件怎么写。所以这次使用万能的重装大法,来上线这个博客网站。 输入: yum remove nginx卸载nginx 输入: rm -rf /etc/nginx/删除之前的配置文件 输入: yum install nginx安装nginx 输入: cd /etc/nginx/进入nginx 的配置文件夹 输入: ll 可以看到如下文件 输入: systemctl nginx.service start 启动nginx服务,打开浏览器输入服务器的公网IP见到下面的界面证明安装成功。 接下来安装uwsgi 输入: pip3 install uwsgi ...

June 30, 2019 · 1 min · jiezi

反向代理华为云OBS实现自定义域名访问

前言之前上了一波华为云的车,买了一台小鸡,然后又买了华为云的OBS服务(对象存储),这里主要记录的是如何反向代理配置,对象存储的内容暂不介绍为什么?对象存储建立之后是有一个默认的域名的,但是通过默认的域名会产生流量,一般的云服务厂商都会有同地区的内网访问免流的策略,所以这里我们可以在中间搭建一个桥梁,借助我们的ECS间接访问我们的对象存储服务如何做?首先,打开华为云对象存储控制台->对象->点击上传对象(对象即是我们要操作的文件),上传成功后如图. 打开对象存储控制台->概览->复制访问域名 测试对象存储能够正常访问,打开浏览器新页签,将域名复制进去,后面跟上文件 实例 osdoc-dev.obs.cn-north-4..com/logo.png 打开web服务器配置文件,这里我使用的是nginx,按照如下配置:server { listen 443 ssl; server_name static.osdoc.cn; index index.php index.html index.htm default.php default.htm default.html; root /www; #SSL-START SSL相关配置,请勿删除或修改下一行带注释的404规则 #HTTP_TO_HTTPS_START if ($server_port !~ 443){ rewrite ^(/.*)$ https://$host$1 permanent; } #HTTP_TO_HTTPS_END ssl_certificate /www/cert/fullchain.pem; ssl_certificate_key /www/cert/private.key; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE; ssl_prefer_server_ciphers on; ssl_session_cache shared:SSL:10m; ssl_session_timeout 10m; #SSL-END location /{ proxy_pass http://osdoc-dev.obs.cn-north-4.*******.com; #在这里设置一个代理,将对象存储访问域名设置在这 add_header Cache-Control no-cache; add_header Pragma no-cache; add_header Expires 0; } access_log /www/logs/static.osdoc.cn.log; error_log /www/logs/static.osdoc.cn.error.log; }重启web容器,使用我们自定义的域名进行访问 ...

June 30, 2019 · 1 min · jiezi

nginx反向代理和https配置

nginx反向代理和https配置网上关于nginx的安装教程很多,其中有centos系统的yum安装,还可以自己下载包安装 因为,nginx安装不是本文重点,为了简单博主使用yum安装。---- yum install -y nginx 完成 如果提示包找不到,建议更换yum源后,在进行安装。 yum安装的nginx,配置文件在 /etc/nginx/目录下面。 反向代理配置:Nginx配置文件主要分成四部分:main(全局设置)、server(主机设置)、upstream(上游服务器设置,主要为反向代理、负载均衡相关配置)和 location(URL匹配特定位置后的设置),每部分包含若干个指令。main部分设置的指令将影响其它所有部分的设置;server部分的指令主要用于指定虚拟主机域名、IP和端口;upstream的指令用于设置一系列的后端服务器,设置反向代理及后端服务器的负载均衡;location部分用于匹配网页位置(比如,根目录“/”,“/images”,等等)。他们之间的关系式:server继承main,location继承server;upstream既不会继承指令也不会被继承。它有自己的特殊指令,不需要在其他地方的应用。 (1)server(主机配置)listen指监听的端口 80,81server_name 服务器名字指监听的ip,域名location指代理的路径。启动server可以配置多个,每个端口可以相同也可以不同。根据server_name不同,listen不同,代理到location中的路径中。比如访问aa.com代理到8080,aa.com:81代理到8081,bb.com代理到8082 (2)upstream用户配置负载均衡:访问 cszhi.com将会代理到下面这几个服务器,还有配置权重,规则。 (3)location路径配置:location根据正则匹配,匹配路径下的静态文件,也可以通过proxy_pass转到别的服务 https配置配置之前需要了解一下概念。HTTPS是一种通过计算机网络进行安全通信的传输协议,经由HTTP进行通信,利用SSL/TLS建立全信道,加密数据包。HTTPS使用的主要目的是提供对网站服务器的身份认证,同时保护交换数据的隐私与完整性。PS:TLS是传输层加密协议,前身是SSL协议,由网景公司1995年发布,有时候两者不区分。ca是ssl证书的签发机构ssl证书可以购买阿里云免费证书 https://yundunnext.console.al... 下载nginx版证书,添加到服务器中,配置nginx: 同时监听80和443端口,当使用http访问自动跳转到https,根据if($schema ==hhtp)完成 ssl_certificate配置证书路径 ssl_certificate_key 配置key路径 保存,重启nginx。 启动发现访问 ailijie.top成功跳转为 https://ailijie.top 使用hhtps后站点内所有的请求都要使用https不然会被浏览器进行拦截。 未完待续,有问题请留言。

June 30, 2019 · 1 min · jiezi

基于阿里云ECS-Centos7-搭建个人网站服务器在大陆

远程连接服务器 1. 通过Xshell 6(推荐) 填主机,然后点击用户身份验证,选择账号密码登陆就好了,当然也可以选择ssh的方式登陆。用这个软件的好处就是方便上传文件,命令为rz -E,如果显示not command,则先安装,命令为```yum install lrzsz```2. 通过cmd连接ssh root@xx.xx.xx.xx 如果提示“”,则用ssh -o StrictHostKeyChecking=no root@xx.xx.xx.xx修改yum源因为大多数安装包都在国外,所以大多数包都无法直接安装。因此,第一次远程连接主机,先更新yum源 首先备份系统自带yum源配置文件/etc/yum.repos.d/CentOS-Base.repomv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup 2. 进入yum源配置文件所在的文件夹 cd /etc/yum.repos.d/3. 下载163的yum源配置文件到上面那个文件夹内wget http://mirrors.163.com/.help/CentOS7-Base-163.repo4. 清除缓存更新yum clean allyum makecacheyum update安装Nginx 1. 添加Nginx yum源sudo rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm2. 安装yum install -y nginx3.启动和设置自启动sudo systemctl start nginx.servicesudo systemctl enable nginx.service4.nginx相关信息 静态文件目录:/usr/share/nginx/html 网站默认站点配置: /etc/nginx/conf.d/default.conf 自定义Nginx站点配置文件存放目录: /etc/nginx/conf.d/ Nginx全局配置: /etc/nginx/nginx.conf 5.测试 服务器中运行curl http://127.0.0.1 //输出相关网页内容http://<ip> //输出Nginx 默认网页安装node.js环境curl --silent --location https://rpm.nodesource.com/setup_8.x | sudo bash -sudo yum -y install nodejs但该方法只能安装6.x版本的node.js,不知道为啥。 ...

June 29, 2019 · 1 min · jiezi

学习到实践六docker自定义nginxopenresty

前言为什么要使用openresty?官方说明:OpenResty® 是一个基于 Nginx 与 Lua 的高性能 Web 平台,其内部集成了大量精良的 Lua 库、第三方模块以及大多数的依赖项。所以。但openresty官方没有发布docker相关东西,所以以:结合openresty安装、参考docker-nginx官方的为原则编写。 1.依赖安装测试官方声明依赖:perl 5.6.1+, libpcre, libssl a.按nginx镜像测试# perl查找/ # apk search perl5perl-5.26.3-r0 #就一个可选/ # apk search libpcrelibpcre2-32-10.32-r1 #貌似最新版本了,32位的?pcre-dev-8.42-r1libpcre2-16-10.32-r1pcre2-dev-10.32-r1libpcre16-8.42-r1libpcre32-8.42-r1pcre2-10.32-r1pcre-8.42-r1libpcrecpp-8.42-r1/ # apk search libsslopenssl-dev-1.1.1b-r1libressl-dev-2.7.5-r0 #看起来最合适nss-3.41-r0libssl1.1-1.1.1b-r1dovecot-2.3.6-r0libressl2.7-libssl-2.7.5-r0/ # apk add perl-5.26.3-r0 libpcre2-32-10.32-r1 libressl-dev-2.7.5-r0# 完全报错,这个alpine依赖搞不了,官方https://pkgs.alpinelinux.org/包的搜索页捉襟见肘,不得不放弃“小而美”。b.容器测试参考官方选则debian,github上构建平台镜像的许多镜像选择stretch-slim精简版的,看下大小最新的只有55.3M,比较满意。环境安装测试: []:~/tmp/dk/openresty# docker run -itd --name df -v /root/tmp/dk/openresty:/tmp/host debian:stretch-slim[]:~/tmp/dk/openresty# docker exec df -it /bin/bash初始安装清华源,切换百度源(云本机),apt-get update超慢,后回归官源,后期卡死用网易源。问题:1、./configure: error: ngx_postgres addon was unable to detect version of the libpq library. apt-get libpq-dev -y2、./configure: error: the HTTP gzip module requires the zlib library. ...

June 29, 2019 · 2 min · jiezi

Nginx之正向代理与反向代理的理解

nginx的一大用处是进行反向代理来完成完成负载均衡。那么有反向代理,就有正向代理。来看看他们的区别正向代理图解:用户(客户端)去饭店吃饭(发送一个请求),用户要吃的是小龙虾(请求),可是你不能自己做,那么就需要让大厨(服务端)给你做 ,可是去了饭店,大厨是在后台的,你也不能直接去告诉大厨,因为你没有权限(服务端在后台)这时候就需要服务员(代理)来帮忙告诉说某某某客户(客户端)要一份10斤小龙虾(请求/访问资源)大厨(服务端)收到给做好然后交给服务员(代理)服务员拿到小龙虾(资源/响应)给客户(用户端)送回来。 反向代理 图解:用户(客户端)去饭店要小龙虾(请求),服务员(代理)收到这个请求发现大厨做不了这个小龙虾,可是又需要挣钱,这怎么办呢?服务员这么一想,隔壁那家饭店可以做,而我也和那家大厨(另一个服务端)有交集,那我去让另一家大厨给做怎么样?好。于是服务员就去告诉另一家大厨说你帮我做一个小龙虾(请求)吧,隔壁大厨说好呀,可以。就做好交给服务员。那么这个时候,这个服务员(反向代理)就成为了反向代理,因为他去调用别的服务端。这个时候我们(客户端)通常来说是没必要知道这小龙虾怎么来的,只要有就好。 注意点:那这个服务员是谁都可以当的吗?肯定不可以呀,所以这个服务员(代理)需要在饭店任职(配置)之后才可以。也就是代理需要配置。 那么反向代理需要吗?答案是不需要的,自己思考就会明白。 那么反向代理的优点就体现出来了,我不需要配置,而且我不仅只能在一家调用请求,我可以向多个服务端去发出请求。而且反向代理还可以向多台后端服务器进行负载平衡。

June 28, 2019 · 1 min · jiezi

laravel-nginx-配置隐藏indexphp

location / { try_files $uri $uri/ /index.php?$query_string;}您可以加上这些,让你的链接更加优雅# 去除末尾的斜杠,SEO更加友好if (!-d $request_filename){ rewrite ^/(.+)/$ /$1 permanent;}# 去除index actionif ($request_uri ~* index/?$){ rewrite ^/(.*)/index/?$ /$1 permanent;}# 根据laravel规则进行url重写if (!-e $request_filename){ rewrite ^/(.*)$ /index.php?/$1 last; break;}error_page 500 502 503 504 /50x.html;location = /50x.html { root html;}

June 27, 2019 · 1 min · jiezi

初遇Nginx之简介

nginx 是一个免费的,开源的,高性能的HTTP服务器和反向代理,以及IMAP / POP3代理服务器。 Nginx 以其高性能,稳定性,丰富的功能,简单的配置和低资源消耗而闻名。很多高知名度的网站都使用 Nginx,如:Netflix,GitHub,SoundCloud,MaxCDN 等。Nginx 有一个主线程( master process)和几个工作线程(worker process)。主线程的目的是加载和验证配置文件、维护工作线程。工作线程处理实际的请求,Nginx 采用基于事件的模型和依赖操作系统的机制在工作线程之间高效地分发请求。工作线程的数量可配置,也可自动调整为服务器CPU的数量。 安装简单介绍下ubuntu进行nginx安装的操作。可用通过apt-get update和apt-get install nginx进行安装 在通过 nginx -v来查看是否安装正确。 Ubuntu安装之后的文件结构大致为: /usr/sbin/nginx:主程序/etc/nginx:存放配置文件/usr/share/nginx:存放静态文件/var/log/nginx:存放日志其实从上面的根目录文件夹可以知道,Linux系统的配置文件一般放在/etc,日志一般放在/var/log,运行的程序一般放在/usr/sbin或者/usr/bin。当然,如果要更清楚Nginx的配置项放在什么地方,可以打开/etc/nginx/nginx.conf。 启动Nginx服务运行nginx服务可通过命令server nginx start可启动服务,打开浏览器在地址栏输入localhost可严重是否启动成功。 其他常用命令######停止Nginx服务 service nginx stop######重启Nginx服务 service nginx restart######Nginx服务的状态 service nginx status######在Nginx服务启动的状态下,重新加载nginx.conf这个配置文件 service nginx reload 卸载nginx通过如下几个命令可进行卸载: apt-get remove nginx nginx-common # 卸载删除除了配置文件以外的所有文件。apt-get purge nginx nginx-common # 卸载所有东东,包括删除配置文件。apt-get autoremove # 在上面命令结束后执行,主要是卸载删除Nginx的不再被使用的依赖包。apt-get remove nginx-full nginx-common #卸载删除两个主要的包。

June 27, 2019 · 1 min · jiezi