Nginx由浅到深

  • 前言
  • 一、nginx的基本概念
    • 1、反向代理
    • 2、负载均衡
    • 3、动静分离
  • 二、nginx在linux下的安装
    • 1、安装nginx相关依赖
      • 安装 pcre 依赖
      • 安装剩余依赖
    • 2、安装nginx
    • 3、启动nginx
  • 三、nginx的基本操作
    • 1、基本命令
    • 2、配置文件
      • 全局块
      • events块
      • http块
        • http全局块
        • server块
  • 四、nginx实例配置
    • (一)、反向代理
      • 1、准备工作
        • 安装tomcat
      • 2、实例实现-1
      • 3、实例实现-2
        • 准备工作
        • nginx配置
      • 4、补充,location指令说明
    • (二)、负载均衡
      • 1、准备工作
      • 2、nginx配置
      • 3、nginx负载均衡策略
        • weigh(权重)
        • ip_hash
        • fair(第三方)
    • (三)、动静分离
      • 1、准备工作
        • 准备静态资源
      • 2、nginx配置
      • 3、测试
  • 五、nginx配置高可用集群
    • 1、准备工作
    • 2、高可用配置(主从配置)
    • 3、测试
  • 六、Nginx基本原理
    • 1、master&worker机制
    • 2、master&worker机制的优势
    • 3、相关问题
  • end...

前言

在我们的开发过程中,Nginx是经常使用到的工具,我们常常用来做反向代理、负载均衡等,由于没有系统的学习,对nginx的使用和理解都停留在表面,因此,在这里将nginx进行一次系统的学习,并记录学习过程,本文没有进行实际操作,某些步骤可能存在差错。文章课程链接:尚硅谷Nginx教程由浅入深

一、nginx的基本概念

nginx是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务。其特点是占有内存少,并发能力强,事实上nginx的并发能力在同类型的网页服务器中表现较好。有报告表明能支持高达50000个并发连接数。

1、反向代理

说到反向代理,不得不说说正向代理,什么是正向代理,如果把局域网外的internet想象成一个巨大的资源库,则局域网中的客户端要访问internet,则需要通过代理服务器来访问,这种代理服务器就称为正向代理。简单来说,就是访问一个网址,先给浏览器配置代理服务器(区别与反向代理),通过代理服务器再去帮我们访问网址。
反向代理: 我们只需要将请求发送到反向代理服务器,由反向代理服务器去选择目标服务器,目标服务器处理完后返回数据,在返回给客户端,此时反向代理服务器和目标服务器对外就是一个服务器,暴露的是代理服务器地址,隐藏了真实服务器IP地址。如图

2、负载均衡

在我们传统单一的web项目中,完整的一个过程是:客户端发起请求 --> 服务器 --> 数据库,然后返回到客户端,在并发量少时,这样是没问题的,但随着使用人群的增多,并发量变大,项目就会出现性能瓶颈,经常出现宕机的情况。为了解决这个问题,我们有许多解决方案,最直接的就是提高硬件设施的性能,但这样做不但成本高,而且随着项目的复杂度、访问量等继续增大,带来的问题也越来越多。我们打个比喻,开始2个人同时吃饭(并发),我们拿个小锅就可以解决,然后到10个,我们可以换成大一点的,如果到100个人,我们就不太可能买一口能够做100份食物的锅了,这时,我们可以买10口做10个人的饭的锅,这样也能满足我们的需求。负载均衡也一样,我们通过多台服务器(集群)来解决大并发的问题,nginx自动帮我们将请求分配到各个服务器。

3、动静分离

用来加快网站的解析速度,可以把动态页面和静态页面由不同的服务器来解析,加快解析的速度,降低原来单个服务器的压力。如图:

二、nginx在linux下的安装

安装前请下载好nginx安装包

1、安装nginx相关依赖

依赖包括:pcre-8.37.tar.gz、openssl-1.0.1t.tar.gz、zlib-1.2.8.tar.gz、nginx-1.11.1.tar.gz

安装 pcre 依赖

  1. 下载 pcre 压缩文件依赖

    wget http://downloads.sourceforge.net/project/pcre/pcre/8.37/pcre-8.37.tar.gz

  2. 解压文件

    命令 tar –xvf pcre-8.37.tar.gz

  3. 编译

    进入 pcre-8.37 执行 ./configure,完成后回到 pcre 目录下执行 make && make install

  4. 查看 pcre 依赖是否安装成功

    执行pcre-config --version

安装剩余依赖

输入命令

yum -y install make zlib zlib-devel gcc-c++ libtool openssl openssl-devel

2、安装nginx

  1. 解压 nginx

    tar -xvf nginx-1.12.2.tar.gz

  2. 进入解压后的目录,执行 ./configure

    进入解压后的目录会有一个configure文件,输入 ./configure 命令执行

  3. 编译

    make && make install

3、启动nginx

启动看看有没有问题,先进入目录 /usr/local/nginx/sbin/nginx(要root权限下进入),执行

./nginx

然后浏览器访问自己服务器的ip+80端口,访问到的前提是防火墙开放了80端口,如果访问到显示Welcome to nginx!,则是成功了。如果没有成功,要排查下防火墙是否开放了端口,操作如下:

  1. 关闭防火墙
  2. 开放端口
  3. 重启防火墙

开放防火墙的某个端口,每个linux系统操作命令可能存在差异,演示为Centos 6

查看防火墙当前设置,具体开放的端口号信息
/etc/init.d/iptables status
配置防火墙策略 vi 或 vim
vim /etc/sysconfig/iptables
开放 66 88 端口
-A INPUT -m state –state NEW -m tcp -p tcp –dport 66 -j ACCEPT
-A INPUT -m state –state NEW -m tcp -p tcp –dport 88 -j ACCEPT
保存退出
按 esc 然后 :wq
重启防火墙
service iptables restart

其他命令

查看防火墙状态
service iptables status
开启防火墙
service iptables start
关闭防火墙
service iptables stop

三、nginx的基本操作

1、基本命令

注意,使用nginx操作命令前提条件,必须进入到nginx的目录

/usr/local/nginx/sbin
常用命令如下

# 查看版本号
./nginx -v
# 启动nginx
./nginx
# 关闭nginx
./nginx -s stop
# 重新加载nginx(修改配置文件使其生效)
./nginx -s reload

2、配置文件

nginx的配置文件在nginx目录下的conf目录,全名为nginx.conf
nginx的配置文件由三部分组成

全局块

从配置文件开始到events块之间的内容,主要会设置一些影响nginx服务器整体运行的配置指令

比如配置
worker_processes 1;
这是nginx服务器并发处理服务的关键配置,它的值越大,可以支持的并发处理量也越多,但是会受到硬件、软件等设备的制约。

events块

events块涉及的指令主要影响nginx服务器与用户的网络连接,常用的设置包括是否开启对多 work process下的网络连接进行序列化,是否允许同时接收多个网络连接,选取哪种事件驱动模型来处理连接请求,每个work process可以同时支持的最大连接数等

比如配置
worker_connections 1024;
支持的最大连接数为1024,这部分配置对于nginx的性能影响较大,在实际中应灵活配置

http块

这是nginx配置中最频繁的一部分,代理、缓存和日志定义等绝大多数功能和第三方模块的配置都在这里,需要注意的是,http块包括http全局块、server块

http全局块

这部分包括文件引入,MIME-TYPE定义,日志自定义、连接超时时间、单链接请求数上限等。

server块

这块和虚拟主机有密切关系,虚拟主机从用户角度看,和一台独立的硬件主机是完全一样的,该技术的产生是为了 节省互联网服务器硬件成本。每个 http 块可以包括多个 server 块,而每个 server 块就相当于一个虚拟主机。而每个 server 块也分为全局 server 块,以及可以同时包含多个 locaton 块。
全局 server 块
最常见的配置是本虚拟机主机的监听配置和本虚拟主机的名称或IP配置。
比如配置,代表监听80端口,服务名称为localhost

     listen                80;server_name  localhost;

location 块
一个 server 块可以配置多个 location 块。这块的主要作用是基于 Nginx 服务器接收到的请求字符串(例如 server_name/uri-string),对虚拟主机名称 (也可以是IP 别名)之外的字符串(例如 前面的 /uri-string)进行匹配,对特定的请求进行处理。 地址定向、数据缓存和应答控制等功能,还有许多第三方模块的配置也在这里进行。
比如配置

location /{root    html;index   index.html main.html
}

四、nginx实例配置

(一)、反向代理

1、准备工作

安装tomcat

1 在linux系统安装tomcat,使用默认端口8080

  1. 将tomcat的压缩包放到/usr/src目录下(可以使用filezilla工具通过拖动的方式来上传)
  2. 进入目录,将tomcat解压,命令:tar -xvf 压缩包名称
  3. 启动tomcat:进入tomcat目录,有一个startup.sh,执行命令:./startup.sh,启动成功后会看到 Tomcat started的提示,也可以通过日志查看启动效果,进入到 logs 目录下,输入命令:tail -f catalina.out 即可查看

2 对外开放访问的端口

  1. 在这里我们先添加开放的端口号:8080
# 添加开放端口:8080
firewall-cmd --add-port=8080/tcp --permanent
# 重新加载
firewall-cmd --reload
  1. 查看开放的端口号
firewall-cmd --list-all

3 在windows系统中通过浏览器访问tomcat

在浏览器输入:服务器ip:8080,如果访问到的是tomcat的主页面,则是成功了,我们进入下一步

2、实例实现-1

实现的效果为,在浏览器地址输入 www.666.com 就跳转到linux系统的tomcat主页面中

1 配置域名

先在C:\Windows\System32\drivers\etc目录下配置自己的域名(如果不是买的),这个域名可以随便取名,配置格式为:服务器ip+空格+域名,这样你的机子就知道这个域名对应的ip是啥了,不然就只有买一个,让你的机子去dns服务器上找,例如:192.168.16.168 www.666.com,配置好后,我们可以通过 www.666.com:8080访问到tomcat,但是需要加端口8080

2 nginx请求转发的配置

  1. 进入到nginx的配置文件,进行配置
server {#监听端口listen     80;#监听ipserver_name 192.168.16.168;location / {root html;#代理的目标地址proxy_pass http://127.0.0.1:8080;index index.html main.html;}
}
  1. 修改后保存(esc键 :wq),并运行nginx:./nginx
  2. 验证是否生效

输入www.666.com,如果来到了tomcat的主页面,则是成功了

3、实例实现-2

实现效果为,使用nginx反向代理,根据访问的路径跳转到不同端口的服务中,nginx监听的端口为6661,例如访问http://192.168.16.168:6661/edu/ 直接跳转到127.0.0.1:8881,访问http://192.168.16.168:6661/vod/ 直接跳转到127.0.0.1:9991

准备工作

1 准备两个tomcat服务器

这里,我们需要准备两个tomcat服务器,一个端口8881,一个9991,在服务器的某个目录(推荐为/usr/src下)创建两个文件夹,命令:mkdir tomcat8881 和 mkdir tomcat9991,然后用工具把tomcat压缩包传进来,步骤和前面的准备工作一样。
然后,我们先停掉上一个例子的tomcat,查看tomcat进程:ps -ef | grep tomcat,根据进程号,把它杀掉,命令:kill -9 进程id
下一步和上面的步骤一样,解压,修改配置(修改相应的端口号),启动,开放端口
最后,浏览器输入服务器地址(http://192.168.16.168:8881和9991),看看是否成功启动

2 准备文件夹和测试页面

在端口为8881的tomcat的目录下,再进入到webapps目录,创建文件夹edu,随便拖进来一个html(可以区别两个端口接口),同样的,在9991的tomcat目录下做同样操作,操作完后访问(http://192.168.16.168:8881/edu/cs.html、http://192.168.16.168:9991/vod/cs.html),如能访问进行下一步

nginx配置

1 进入到nginx的配置文件,开始配置
配置后保存退出

server {#监听端口listen     6661;#监听ipserver_name 192.168.16.168;# ~代表是正则表达式,当请求路径中有edu就到第一个locationlocation ~ /edu/ {#代理的目标地址proxy_pass http://127.0.0.1:8881;}location ~ /vod/ {#代理的目标地址proxy_pass http://127.0.0.1:9991;}
}

2 开放对应的端口

端口号:6661、8881、9991,跟上面的步骤一样,修改配置–>保存–>重启

3 测试

先重启nginx,然后访问两个路径,如果访问的html为正确的,则配置成功

4、补充,location指令说明

该指令用于匹配 URL。
语法如下:

  1. = :用于不含正则表达式的 uri 前,要求请求字符串与 uri 严格匹配,如果匹配成功,就停止继续向下搜索并立即处理该请求。
  2. ~:用于表示 uri 包含正则表达式,并且区分大小写。
  3. ~*:用于表示 uri 包含正则表达式,并且不区分大小写。
  4. ^~:用于不含正则表达式的 uri 前,要求 Nginx 服务器找到标识 uri 和请求字 符串匹配度最高的 location 后,立即使用此 location 处理请求,而不再使用 location 块中的正则 uri 和请求字符串做匹配。

注意:
如果 uri 包含正则表达式,则必须要有 ~ 或者 ~*标识。

(二)、负载均衡

实现效果,浏览器地址栏访问:http://192.168.16.168/edu/cs.html,负载均衡效果,平均到 8881端口和9991端口中

1、准备工作

操作和上面一样

准备两台tomcat服务器,一台8881,一台9991,前面已经准备过了
在两台tomcat服务器的webapps目录中,创建名称是deu的文件夹,再创建html页面(用于区分)

2、nginx配置

1 进入到nginx的配置文件,开始配置
配置后保存退出

upstream myserver {server 192.168.16.168:8881;server 192.168.16.168:9991;
}
server {listen     80;server_name 192.168.16.168;location / {#代理的目标地址就是我们前面配置的myserverproxy_pass http://myserver;}
}

2 测试效果

保存配置文件后应重启nginx,然后访问 http://192.168.16.168,请求多次,如果相应的结果是交替的(轮询),则是成功了

3、nginx负载均衡策略

前面的测试中,我们发现nginx的默认策略是轮询,那它还有哪些策略呐,这里我们进行一些补充

weigh(权重)

默认值为1,权重越高的被分配的机会越大,被请求的次数也越多(成正比)
示例配置如下

upstream myserver {server 192.168.16.168:8881 weight=3;server 192.168.16.168:9991 weight=5;
}

ip_hash

每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题
示例配置如下

upstream myserver {ip_hashserver 192.168.16.168:8881;server 192.168.16.168:9991;
}

fair(第三方)

按照后端服务器的响应时间来分配(服务器配置高的多接收点响应),响应时间短的优先分配
示例配置如下

upstream myserver {server 192.168.16.168:8881;server 192.168.16.168:9991;fair
}

(三)、动静分离

在前面nginx的介绍部分,我们讲到了什么是动静分离,从目前实现角度来讲,大致分为两种:
一种是将静态文件独立成单独的域名,放在独立的服务器上,这是主流的方案
一种是将静态和动态的文件放在一起,通过nginx来分开
我们通过 location 指定不同的后缀名实现不同的请求转发。通过 expires 参数设置,可以使浏览器缓存过期时间,减少与服务器之前的请求和流量。具体 Expires 定义:是给一个资 源设定一个过期时间,也就是说无需去服务端验证,直接通过浏览器自身确认是否过期即可, 所以不会产生额外的流量。此种方法非常适合不经常变动的资源。

1、准备工作

准备静态资源

在我们的服务器中创建文件夹data,在data目录下在创建两个文件夹(html和img),放一些静态资源

2、nginx配置

打开配置文件,进行如下配置

server {listen      80;server_name 192.168.16.168;location /img/ {root /data/;}location /html/ {root /data/;# 列出当前目录的内容autoindex on;}
}

3、测试

访问地址,如下,如果能访问到则成功

http://192.168.16.168/img/cs.png
http://192.168.16.168/html/cs.html

五、nginx配置高可用集群

相信大家对高可用还是比较熟悉了,我们不再赘述,直击主题,实现高可用我们需要做如下工作:

1、准备两台nginx服务器
2、准备keepalived(帮助我们检测nginx是否挂掉了)
Keepalived是一个基于VRRP协议来实现的服务高可用方案,可以利用其来避免IP单点故障,类似的工具还有heartbeat、corosync、pacemaker。但是它一般不会单独出现,而是与其它负载均衡技术(如lvs、haproxy、nginx)一起工作来达到集群的高可用。
3、虚拟ip

这里可以参考这篇文章Nginx+keepalived 双机热备,写的比较详细

1、准备工作

1.准备两台服务器,可以选择在本机跑虚拟机,并安装好nginx环境
2.给两台服务器安装keepalived
输入命令完成安装,也可以通过下载安装包解压安装

# 安装
yum install keepalived -y
# 查看版本
rpm -q -a keepalived

安装好之后,在 etc目录里会自动生成一个目录 keepalived,目录下有一个文件 keepalived.conf ,这个文件就是我们配置主从模式的地方

2、高可用配置(主从配置)

修改keepalived.conf中的一些配置,完成高可用
注意:两台服务器都要进行配置,配置内容部分不一样

# 全局定义
global_defs { notification_email { acassen@firewall.loc failover@firewall.loc sysadmin@firewall.loc } notification_email_from Alexandre.Cassen@firewall.loc smtp_server 127.0.0.1 # 邮件服务器地址smtp_connect_timeout 30 # 超时时间# 通过这个名字:LVS_DEVEL,能够访问到我们的主机# 配置在 etc/hosts文件中 对应:127.0.0.1 LVS_DEVELrouter_id LVS_DEVEL } vrrp_script chk_http_port { script "/usr/local/src/nginx_check.sh" # 检测脚本的路径interval 2      #(检测脚本执行的间隔)2秒weight 2 # 权重} vrrp_instance VI_1 {     state MASTER   # (初始状态,最终状态由priority 值决定)备份服务器上将 MASTER 改为 BACKUP,# 如果master的priority数值小于backup的,运行时会被backup抢占为master    interface ens192  # 通信接口 根据服务器的网卡来进行配置:ip addr # mcast_src_ip 192.168.16.168 # 发送多播数据包时的源IP地址(本机ip),这里注意了,这里实际上就是在哪个地址上发送VRRP通告,这个非常重要,一定要选择稳定的网卡端口来发送,这里相当于heartbeat的心跳端口,如果没有设置那么就用默认的绑定的网卡的IP,也就是interface指定的IP地址virtual_router_id 51   # 主、备机的 virtual_router_id 必须相同     priority 100     # 主、备机取不同的优先级,主机值较大,备份机值较小advert_int 1 # 心跳检测 1秒authentication { # 服务器之间的通信密码auth_type PASS auth_pass 1111 } virtual_ipaddress {         192.168.17.50 # VRRP HA 虚拟地址 访问的时候就访问这个,多个换行继续写}
}

根据上面配置的检测脚本的地址,添加该脚本

#!/bin/bash
A=`ps -C nginx –no-header |wc -l`
if [ $A -eq 0 ];then/usr/local/nginx/sbin/nginxsleep 2if [ `ps -C nginx --no-header |wc -l` -eq 0 ];thenkillall keepalivedfi
fi

配置好后,启动两台服务器的nginx和keepalived,启动keepalived的命令为

systemctl start keepalived.service

是否成功启动可以查看相应的进程,命令为

# ps -ef | grep java
# ps -ef | grep keepalived
ps -ef | grep 名称

3、测试

  1. 输入虚拟ip地址,进行访问,如果能访问到,则是成功的
  2. 关闭master服务器的nginx和keepalived(关闭后需查看进程,确认其已经关闭),命令如下,如果该地址还能继续访问到,则高可用配置成功
systemctl stop keepalived.service
./nginx -s stop

六、Nginx基本原理

1、master&worker机制

nginx 启动后,由两个进程组成,一个是master(管理者),一个是worker(工作者)
一个nginx:master只有一个,worker可以有多个,master的工作包括:接受信号,将信号分发给worker进程,监听worker进程工作状态,当worker进程退出时(非正常),启动新的worker进程可以通过命令查看相关进程

ps -ef | grep nginx

master就相当于领导,不做实质工作,只分配工作,worker是员工,负责处理工作,当一个请求进来,master进行管理,worker通过争抢的方式去获取请求,图示:

2、master&worker机制的优势

  1. 首先,对于每个 worker 进程来说,独立的进程,不需要加锁,所以省掉了锁带来的开销,同时在编程以及问题查找时,也会方便很多
  2. 可以使用 nginx –s reload 热部署(不需要停机,边工作,边加载新的配置),利用 nginx 进行热部署操作
  3. 其次,采用独立的进程,可以让互相之间不会影响,一个进程退出后,其它进程还在工作,服务不会中断,master 进程则很快启动新的 worker 进程

3、相关问题

worker的数量:
Nginx 同 redis 类似都采用了 io 多路复用机制,每个 worker 都是一个独立的进程,但每个进程里只有一个主线程,通过异步非阻塞的方式来处理请求, 即使是千上万个请求也不在话下。每个 worker 的线程可以把一个 cpu 的性能发挥到极致。所以 worker 数和服务器的 cpu 数相等是最为适宜的。设少了会浪费 cpu,设多了会造成 cpu 频繁切换上下文带来的损耗
连接数worker_connection
发送一个请求需要占用两个或者四个worker,静态资源为两个(一来一回),动态资源(服务器)为四个(nginx还要去访问tomcat等服务器,拿到信息后返回,占用两个)
nginx支持的最大并发数
nginx 有一个 master,有四个 woker,每个 woker 支持最大的连接数 1024,支持的最大并发数是多少?

普通的静态访问最大并发数是: worker_connections * worker_processes / 2

而如果是 HTTP 作为反向代理来说,最大并发数量应该是 worker_connections * worker_processes / 4

这个值是表示每个 worker 进程所能建立连接的最大值,所以,一个 nginx 能建立的最大连接 数,应该是 worker_connections * worker_processes。当然,这里说的是最大连接数,对于 HTTP 请 求 本 地 资 源 来 说 , 能 够 支 持 的 最 大 并 发 数 量 是 worker_connections * worker_processes,如果是支持 http1.1 的浏览器每次访问要占两个连接,所以普通的静态访问最大并发数是: worker_connections * worker_processes / 2,而如果是 HTTP 作 为反向代理来说,最大并发数量应该是 worker_connections * worker_processes / 4。因为作为反向代理服务器,每个并发会建立与客户端的连接和与后端服务的连接,会占用两个连接。

end…

**如果总结的还行,就点个赞呗 @_@ 如有错误,欢迎指点!

Nginx由浅到深-尚硅谷nginx教程相关推荐

  1. 尚硅谷Nginx新版升级教程,带你轻松掌握高并发系统架构

    摘要:桃李春风一杯酒,江湖夜雨十年灯. "你说有没有一种可能, "你喜欢我,又不好意思说出口, "其实你可以直接说出来的, "我会让你知道什么叫心想事成.&qu ...

  2. 04 frameset-iframe【尚硅谷JavaWeb教程】

    04 frameset-iframe[尚硅谷JavaWeb教程] JAVAWEB的学习笔记 学习视频来自:https://www.bilibili.com/video/BV1AS4y177xJ/?vd ...

  3. 06 CSS-盒子模型【尚硅谷JavaWeb教程】

    06 CSS-盒子模型[尚硅谷JavaWeb教程] JAVAWEB的学习笔记 学习视频来自:https://www.bilibili.com/video/BV1AS4y177xJ/?vd_source ...

  4. 尚硅谷linux教程6 组管理和权限管理(难点、重点)

    尚硅谷linux教程6 组管理和权限管理(难点.重点) linux组的基本介绍 在 linux 中的每个用户必须属于一个组,不能独立于组外.在 linux 中每个文件有所有者.所在组.其它组的概念. ...

  5. JAVA-暑假笔记(源自尚硅谷Java教程)

    命令行指令 使用WIN+R键显示页面,然后输入 cmd 进入控制台. 基础指令:   Dir  :  列出当前目录下的文件及文件夹. directory         Md  :  创建目录    ...

  6. 尚硅谷RabbitMQ教程笔记 一、消息队列

    消息队列 1.MQ的相关概念 1.1 什么时MQ 1.2 为什么要用MQ 1.3 MQ的分类 1.3.1.ActiveMQ 1.3.2.Kafka 1.3.3.RocketMQ 1.3.4.Rabbi ...

  7. 【YY笔记】React.入门(尚硅谷React教程笔记)

    前言 教程链接:尚硅谷React技术全家桶全套完整版:天禹老师讲得挺好,感谢免费分享教程 笔记用OneNote记的,不想重写了,但是想保留格式就只能用图片传上来--很烦 可能会有一些疏漏和小白的地方, ...

  8. 尚硅谷nginx学习

    nginx 代理服务器,转发请求到真正的服务器地址(反向代理服务器) 负载均衡 动静分离(动态页面,静态页面分开) 常用命令(在Linux里面) 安装nginx 进入nginx .usr/local/ ...

  9. 尚硅谷nginx笔记

    1.基本介绍 Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务. Nginx是一款轻量级的Web 服务器/反向代理服务器及电 ...

最新文章

  1. 南开校长曹雪涛团队12篇论文被调查“可信性”,此前被举报实验图片有PS痕迹...
  2. 误删了公司数据库,但我还是活下来了
  3. Run Book Automation - RBA开发系列一
  4. vijos 1471 线性DP+贪心
  5. Linq 查询结果 可能遵循 2 º,2¹,2 ²,......增长计算
  6. 三菱plc pwm指令_三菱PLC高速处理指令编程
  7. Firewall常用
  8. GPIO接口-引脚对照
  9. 预制包含很多lib库的apk
  10. 2015年1月工作记录和阅读记录
  11. 机器人学回炉重造(1-2):各种典型机械臂的正运动学建模(标准D-H法)
  12. 让谷歌浏览器不再显示不安全内容的提示
  13. incremental backups
  14. 2080元收2080,3070元收3070!一脸问号【云友热议】
  15. 写在2021最后一天
  16. 阿里云服务器与本地不能复制粘贴
  17. sublime 下 解决Vintage模式下,normal 模式下中文输入的问题。
  18. 快速校验非法字符工具
  19. Linux strace、pstack 命令 使用详解
  20. python socks代理_如何让任意python程序使用socks代理

热门文章

  1. 在vue中input标签手机号码进行正则验证
  2. 【算法】树形DP ② 打家劫舍Ⅲ(树上最大独立集)
  3. 一个oracle面试题
  4. 计算机视觉一定要学opencv吗,Opencv | 学计算机视觉不得不了解的 Mat 类
  5. 深圳机场邀深航协参加跨境电商网购保税进口(1210)业务开通座谈会
  6. 大端小端存储模式详解及判断方法
  7. css 左右布局高度自适应,CSS布局-高度自适应
  8. TouchSlide滚动插件BUG
  9. 关于cgroup 学习
  10. 数据库管理-第二十期(20210304)