zutuanxue.com-nginx与LNMP

Nginx

知识点

​ nginx的安装部署

​ nginx的相关配置文件

​ nginx的基本功能

​ nginx的虚拟主机

​ 反向代理实现

​ 如何实现下载限速

​ URL重写机制

​ nginx优化

课程目标

​ 能够知道nginx的作用

​ 能够知道nginx如何安装部署和设置

​ 能够说出nginx有哪些基本功能

​ 能够实现nginx的虚拟主机,下载限速

​ 能够实现URL重写及优化

一 介绍

Nginx(“engine x”)是一款是由俄罗斯的程序设计师Igor Sysoev所开发高性能的 Web和 反向代理服务器,也是一个 IMAP/POP3/SMTP 代理服务器。和apache一样,都是web服务器软件,因为其性能优异,所以被广大运维喜欢。又因为nginx是一个轻量级的web服务器,相比apache来说资源消耗更低。

http://nginx.org 官网

http://www.nginx.cn/doc/index.html 中文文档

为什么选择nginx

Nginx 是一个高性能的 Web 和反向代理服务器, 它具有有很多非常优越的特性:

作为 Web 服务器:相比 Apache,Nginx 使用更少的资源,支持更多的并发连接,体现更高的效率,这点使 Nginx 尤其受到虚拟主机提供商的欢迎。能够支持高达 50,000 个并发连接数的响应,感谢 Nginx 为我们选择了 epoll and kqueue 作为开发模型.

作为负载均衡服务器:Nginx 既可以在内部直接支持 Rails 和 PHP,也可以支持作为 HTTP代理服务器 对外进行服务。Nginx 用 C 编写, 不论是系统资源开销还是 CPU 使用效率都比 Perlbal 要好的多。

Nginx 安装非常的简单,配置文件 非常简洁(还能够支持perl语法),Bugs非常少的服务器: Nginx 启动特别容易,并且几乎可以做到7*24不间断运行,即使运行数个月也不需要重新启动。你还能够在 不间断服务的情况下进行软件版本的升级。

nginx和apache对比

  1. 静态文件处理能力:nginx高于apache
  2. 资源消耗:nginx优于apache,因为nginx是异步处理模型,只需要几个进程就能够处理大量在线请求,而apache 2.4仍然是进程模型或者线程模型,即仍然采用大量线程来处理大量在线请求。
  3. Apache支持的模块很多,而且也比较稳定。而nginx由于出现的比较晚,所以在这方面可能比不上Apache。
  4. nginx本身就是一个反向代理服务器,而且支持7层负载均衡。
  5. nginx处理动态页面很鸡肋,一般只用与处理静态页面和反向代理。

二 nginx安装部署


1 nginx源码下载

官网:http://nginx.org/

源码包:nginx-1.15.12.tar.gz

源码包下载:wget http://nginx.org/download/nginx-1.15.12.tar.gz -P /usr/src

2 nginx安装

dnf -y install gcc pcre-devel zlib-devel make

cd /usr/src

tar xf nginx-1.15.12.tar.gz

cd nginx-1.15.12

./configure --prefix=/usr/local/nginx

配置目的:
1)检查环境 是否 满足安装条件     依赖解决
2)指定安装方式    配置文件   命令文件  各种文件放哪里   开启模块功能【内置模块  三方模块】
3)指定软件安装在那里

make -j4

make install

3 nginx相关目录

nginx path prefix: “/usr/local/nginx”

nginx binary file: “/usr/local/nginx/sbin/nginx”

nginx modules path: “/usr/local/nginx/modules”

nginx configuration prefix: “/usr/local/nginx/conf”

nginx configuration file: “/usr/local/nginx/conf/nginx.conf”

nginx pid file: “/usr/local/nginx/logs/nginx.pid”

nginx error log file: “/usr/local/nginx/logs/error.log”

nginx http access log file: “/usr/local/nginx/logs/access.log”

4 nginx启动管理

配置文件测试:/usr/local/nginx/sbin/nginx -t

Nginx启动:/usr/local/nginx/sbin/nginx

Nginx关闭:killall –s QUIT nginx

5 nginx测试

nginx安装完毕,接下来就可以启动nginx了,nginx启动后如何测试nginx的启动状态呢?可以通过以下三种方式去测试,这个可以根据自己的习惯选择一种测试就行了。

  • 使用netsata命令查看启动端口
    [root@zutuanxue ~]# netstat –ntpl
  • 使用losf命令查看启动端口
    [root@zutuanxue ~]# lsof -i :80
  • 使用文本浏览器访问nginx默认网站
    [root@zutuanxue ~]# elinks http://IP

测试页面内容如下

zutuanxue.com-nginx与LNMP_第1张图片

三 nginx配置文件

  • nginx配置文件详解
#启动子进程程序默认用户
#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 {
    #每个工作进程最大的并发数
    worker_connections  1024;
}


#http服务器设置
http {
    #设定mime类型,类型由mime.type文件定义
    include       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"';
    #$remote_addr与$http_x_forwarded_for用以记录客户端的ip地址;
    #$remote_user:用来记录客户端用户名称;
    #$time_local: 用来记录访问时间与时区;
    #$request: 用来记录请求的url与http协议;
    #$status: 用来记录请求状态;成功是200,
    #$body_bytes_sent :记录发送给客户端文件主体内容大小;
    #$http_referer:用来记录从那个页面链接访问过来的;
    #$http_user_agent:记录客户浏览器的相关信息;

    #全局访问日志路径 
    #access_log  logs/access.log  main;
    #sendfile指令指定 nginx 是否调用sendfile 函数(zero copy 方式)来输出文件,对于普通应用,必须设为on。如果用来进行下载等应用磁盘IO重负载应用,可设置为off,以平衡磁盘与网络IO处理速度,降低系统uptime。
    sendfile        on;

    #此选项可以减少网络报文段的数量
    #tcp_nopush     on;

    #长连接超时时间
    #keepalive_timeout  0;
    keepalive_timeout  65;

    #开启压缩
    #gzip  on;

    #配置虚拟主机
    server {
        #虚拟主机使用的端口
        listen       80;
        #虚拟主机域名
        server_name  localhost;

        #虚拟主机支持的字符集
        #charset koi8-r;

        #虚拟主机的访问日志路径
        #access_log  logs/host.access.log  main;

        #定义web根路径
        location / {
            #根目录路径
            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;
        }

        #定义反向代理服务器 数据服务器是lamp模型
        # proxy the PHP scripts to Apache listening on 127.0.0.1:80
        #
        #location ~ \.php$ {
        #    proxy_pass   http://127.0.0.1;
        #}


        #定义PHP为本机服务的模型  
        # 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
        #
        #拒绝nginx DR目录及子目录下的.htaccess文件访问
        #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的配置方案
    # 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;
    #    }
    #}

}

四 默认网站及设置


1 默认网站

server {
    listen       80;

    server_name  localhost;

    location / {

        root   html;

        index  index.html index.htm;

        #支持目录浏览
         autoindex  on;

    }

    error_page   500 502 503 504  /50x.html;

    location = /50x.html {

        root   html;

    }

}

2 访问控制

[root@localhost ~]# mkdir /usr/local/nginx/html/a
[root@localhost html]# vim /usr/local/nginx/conf/nginx.conf
location /a {
    autoindex on;
    deny 192.168.11.116;
    allow all;
    #基于客户端IP做过滤,符合条件的允许访问,不符合的禁止访问
    }
[root@localhost ~]# killall  -s HUP nginx

3 登陆验证

[root@localhost ~]# mkdir /usr/local/nginx/html/c
[root@localhost html]# vim /usr/local/nginx/conf/nginx.conf
location /c {
    auth_basic "登陆验证";
    auth_basic_user_file /etc/nginx/htpasswd;

}
[root@localhost ~]# killall  -s HUP nginx

4 日志管理

Nginx访问日志主要有两个参数控制

log_format #用来定义记录日志的格式(可以定义多种日志格式,取不同名字即可)

access_log #用来指定日至文件的路径及使用的何种日志格式记录日志

access_log logs/access.log main;

log_format格式变量:
    $remote_addr  #记录访问网站的客户端地址
    $remote_user  #远程客户端用户名
    $time_local  #记录访问时间与时区
    $request  #用户的http请求起始行信息
    $status  #http状态码,记录请求返回的状态码,例如:200、301、404等
    $body_bytes_sent  #服务器发送给客户端的响应body字节数
    $http_referer  #记录此次请求是从哪个连接访问过来的,可以根据该参数进行防盗链设置。
    $http_user_agent  #记录客户端访问信息,例如:浏览器、手机客户端等
    $http_x_forwarded_for  #当前端有代理服务器时,设置web节点记录客户端地址的配置,此参数生效的前提是代理服务器也要进行相关的x_forwarded_for设置

自定义一个json格式的访问日志

log_format main_json '{
        "@timestamp":"$time_local",
        "client_ip":"$remote_addr",
        "request":"$request",
        "status":"$status",
        "bytes":"$body_bytes_sent",
        "x_forwarded":"$http_x_forwarded_for",
        "referer":"$http_referer"
											}';
    access_log logs/access_json.log main_json;

#重新启动nginx服务查看访问日志
[root@localhost~]# tail -f /usr/local/nginx/logs/access_json.log

5 防盗链

[root@localhost html]# vim /usr/local/nginx/conf/nginx.conf
location / {
            root   html;
            index  index.html index.htm;
        }
        #定义访问资源为图片类型的
location ~* \.(gif|jpg|png|bmp)$ {
				#定义白名单	none代表直接访问的,blocked表示被防火墙标记过的请求最后一个是网址
           valid_referers none blocked *.baidu.com;
                 #如果不在白名单中则返回403
                 if ($invalid_referer) {
                        return 403;
                                        }
        }
[root@localhost ~]# killall  -s HUP nginx       
#在另外一台主机写一个盗链测试页面
dnf install httpd -y
vim /var/www/html/index.html

        
                ce shi<<span class="token operator">/</span>title>
                <body>
                        <a href=<span class="token string">"http://192.168.11.16/1.png"</span>>daolian<<span class="token operator">/</span>a>
                <<span class="token operator">/</span>body>
        <<span class="token operator">/</span>head>
<<span class="token operator">/</span>html>

systemctl restart httpd
</code></pre> 
  <h2>五 虚拟主机</h2> 
  <hr> 
  <h3>1 虚拟主机介绍</h3> 
  <p>就是把一台物理服务器划分成多个“虚拟”的服务器,每一个虚拟主机都可以有独立的域名和独立的目录</p> 
  <p>同时发布两个网站:</p> 
  <p>DocumentRoot /usr/local/nginx/html/web1</p> 
  <p>DocumentRoot /usr/local/nginx/html/web2</p> 
  <h3>2 基于IP的虚拟主机</h3> 
  <p>应用场景:IP充足的环境</p> 
  <pre><code class="prism language-powershell">server <span class="token punctuation">{</span>
    listen       192<span class="token punctuation">.</span>168<span class="token punctuation">.</span>11<span class="token punctuation">.</span>251:80<span class="token punctuation">;</span>
    location <span class="token operator">/</span> <span class="token punctuation">{</span>
        root   html/web1<span class="token punctuation">;</span>
        index  index<span class="token punctuation">.</span>html index<span class="token punctuation">.</span>htm index<span class="token punctuation">.</span>php<span class="token punctuation">;</span>
    <span class="token punctuation">}</span>
<span class="token punctuation">}</span>
server <span class="token punctuation">{</span>
    listen       192<span class="token punctuation">.</span>168<span class="token punctuation">.</span>11<span class="token punctuation">.</span>252:80<span class="token punctuation">;</span>
location <span class="token operator">/</span> <span class="token punctuation">{</span>
        root   html/web2<span class="token punctuation">;</span>
        index  index<span class="token punctuation">.</span>html index<span class="token punctuation">.</span>htm<span class="token punctuation">;</span>
    <span class="token punctuation">}</span>
<span class="token punctuation">}</span>
</code></pre> 
  <h4>基于IP的虚拟主机特点</h4> 
  <p>不同IP对应不同网站</p> 
  <p>访问方便,用户直接使用默认端口即可访问</p> 
  <p>服务器需要有多个IP地址(一个公网IP大概一年的费用是600左右)</p> 
  <p>维护方便,基于独立IP的站点,便于监控、维护。</p> 
  <h3>3 基于端口的虚拟主机</h3> 
  <p>#只需要一个IP</p> 
  <p>#缺点 端口你是无法告诉公网用户 无法适用于公网客户 适合内部用户</p> 
  <pre><code class="prism language-powershell">基于端口
server <span class="token punctuation">{</span>
    listen       80<span class="token punctuation">;</span>
    <span class="token comment">#server_name  www.abc.com;</span>
    location <span class="token operator">/</span> <span class="token punctuation">{</span>
        root   html/web1<span class="token punctuation">;</span>
        index  index<span class="token punctuation">.</span>html index<span class="token punctuation">.</span>htm index<span class="token punctuation">.</span>php<span class="token punctuation">;</span>
    <span class="token punctuation">}</span>
<span class="token punctuation">}</span>
server <span class="token punctuation">{</span>
    listen       8080<span class="token punctuation">;</span>
    <span class="token comment">#server_name  www.abc.com;</span>
    location <span class="token operator">/</span> <span class="token punctuation">{</span>
        root   html/web2<span class="token punctuation">;</span>
        index  index<span class="token punctuation">.</span>html index<span class="token punctuation">.</span>htm<span class="token punctuation">;</span>
    <span class="token punctuation">}</span>
<span class="token punctuation">}</span>
</code></pre> 
  <h4>基于端口的虚拟主机特点</h4> 
  <p>不同端口对应不同网站</p> 
  <p>访问需要加端口</p> 
  <p>节省IP地址</p> 
  <p>适合私网运行</p> 
  <h3>4 基于域名的虚拟主机</h3> 
  <p>#一个网站必然有一个域名</p> 
  <pre><code class="prism language-powershell">基于域名
server <span class="token punctuation">{</span>
    listen       80<span class="token punctuation">;</span>
    server_name  web1<span class="token punctuation">.</span>a<span class="token punctuation">.</span>com<span class="token punctuation">;</span>

    location <span class="token operator">/</span> <span class="token punctuation">{</span>
        root   html/web1<span class="token punctuation">;</span>
        index  index<span class="token punctuation">.</span>html index<span class="token punctuation">.</span>htm index<span class="token punctuation">.</span>php<span class="token punctuation">;</span>

    <span class="token punctuation">}</span>
<span class="token punctuation">}</span>


server <span class="token punctuation">{</span>
    listen       80<span class="token punctuation">;</span>
    server_name  web2<span class="token punctuation">.</span>b<span class="token punctuation">.</span>com<span class="token punctuation">;</span>

    location <span class="token operator">/</span> <span class="token punctuation">{</span>
        root   html/web2<span class="token punctuation">;</span>
        index  index<span class="token punctuation">.</span>html index<span class="token punctuation">.</span>htm<span class="token punctuation">;</span>
    <span class="token punctuation">}</span>
<span class="token punctuation">}</span>
</code></pre> 
  <h4>基于域名的虚拟主机特点</h4> 
  <p>不同域名对应不同网站</p> 
  <p>需要多个域名 可以是二级或三级域名</p> 
  <p>每个站点使用默认端口,方便用户访问</p> 
  <p>只需要一个IP地址,节约成本</p> 
  <p>适合公网环境</p> 
  <h2>六 反向代理</h2> 
  <hr> 
  <h3>1 代理介绍</h3> 
  <p>代理在网络中使用是比较常见的,比如大家去国外网站查找学习资料的时候就会用到代理。其原理也比较简单:</p> 
  <p>1)用户将请求发给代理服务器</p> 
  <p>2)代理服务器代用户去访问数据</p> 
  <p>3)代理服务器将数据给用户</p> 
  <p><strong>正常没有代理情况上网</strong><br> <a href="http://img.e-com-net.com/image/info8/8ec54646a0a64c2894e9e13457a05846.jpg" target="_blank"><img src="http://img.e-com-net.com/image/info8/8ec54646a0a64c2894e9e13457a05846.jpg" alt="zutuanxue.com-nginx与LNMP_第2张图片" width="650" height="131" style="border:1px solid black;"></a></p> 
  <p><strong>代理服务器场景</strong></p> 
  <p><a href="http://img.e-com-net.com/image/info8/8b78d3d502a74fed954a6fe335b9243c.jpg" target="_blank"><img src="http://img.e-com-net.com/image/info8/8b78d3d502a74fed954a6fe335b9243c.jpg" alt="请添加图片描述" width="650" height="98"></a></p> 
  <p><strong>代理服务器扮演的就是一个中间人的角色。</strong></p> 
  <p>代理分为正向代理和反向代理两种类型:</p> 
  <p>正向代理:代理用户访问其他网站,比如ss,蓝灯。</p> 
  <p>反向代理:用来发布服务器,比如nginx</p> 
  <p>我们主要介绍的是反向代理,使用反向代理发布公司的站点。<strong>(国家严厉打击私单乱建代理服务器)</strong></p> 
  <h3>2 应用场景</h3> 
  <p>1)堡垒机:堡垒机承担所有的外部访问,保护后端服务器的安全</p> 
  <p><a href="http://img.e-com-net.com/image/info8/0c0cedc7645b49b39f7e30afd2cb99c7.jpg" target="_blank"><img src="http://img.e-com-net.com/image/info8/0c0cedc7645b49b39f7e30afd2cb99c7.jpg" alt="zutuanxue.com-nginx与LNMP_第3张图片" width="650" height="178" style="border:1px solid black;"></a></p> 
  <p>2)业务发布服务器:将多个服务器通过虚拟主机的方式发布到公网</p> 
  <p><a href="http://img.e-com-net.com/image/info8/a2a4236c80a6481190fe71d501ac8a97.jpg" target="_blank"><img src="http://img.e-com-net.com/image/info8/a2a4236c80a6481190fe71d501ac8a97.jpg" alt="zutuanxue.com-nginx与LNMP_第4张图片" width="650" height="379" style="border:1px solid black;"></a></p> 
  <p>3)缓存服务器:CDN加速</p> 
  <p><a href="http://img.e-com-net.com/image/info8/16cb4bb01a554cfdbe77f4ae631771b6.jpg" target="_blank"><img src="http://img.e-com-net.com/image/info8/16cb4bb01a554cfdbe77f4ae631771b6.jpg" alt="zutuanxue.com-nginx与LNMP_第5张图片" width="650" height="146" style="border:1px solid black;"></a></p> 
  <h3>3 反向代理原理</h3> 
  <ol> 
   <li>客户端通过浏览器 发起请求 代理服务器</li> 
  </ol> 
  <p>2)代理服务器 接受请求</p> 
  <ol start="3"> 
   <li>代理服务器 发起请求 业务服务器</li> 
  </ol> 
  <p>4)业务服务器 接受请求</p> 
  <p>5)业务服务器 处理请求</p> 
  <ol start="6"> 
   <li>业务服务器 响应请求 代理服务器</li> 
  </ol> 
  <p>7)代理服务器 响应请求 客户端</p> 
  <p>8)客户端通过浏览器渲染请求并展示给用户</p> 
  <h3>4 反向代理实现</h3> 
  <p><strong>proxy_pass: nginx反向代理指令</strong></p> 
  <p><strong>反向代理实现</strong></p> 
  <p>location / {</p> 
  <p>index index.php index.html index.htm; #定义首页索引文件的名称</p> 
  <p>proxy_pass http://mysvr ;#请求转向mysvr 定义的服务器列表</p> 
  <p>}</p> 
  <p><strong>反向代理优化</strong></p> 
  <p>proxy_set_header Host $host;</p> 
  <p>proxy_set_header X-Real-IP $remote_addr;</p> 
  <p>proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;</p> 
  <p>client_max_body_size 10m; #允许客户端请求的最大单文件字节数</p> 
  <p>client_body_buffer_size 128k; #缓冲区代理缓冲用户端请求的最大字节数,</p> 
  <p>proxy_connect_timeout 90; #nginx跟后端服务器连接超时时间(代理连接超时)</p> 
  <p>proxy_send_timeout 90; #后端服务器数据回传时间(代理发送超时)</p> 
  <p>proxy_read_timeout 90; #连接成功后,后端服务器响应时间(代理接收超时)</p> 
  <p>proxy_buffer_size 4k; #设置代理服务器(nginx)保存用户头信息的缓冲区大小</p> 
  <p>proxy_buffers 4 32k; #proxy_buffers缓冲区,网页平均在32k以下的话,这样设置</p> 
  <p>proxy_busy_buffers_size 64k; #高负荷下缓冲大小(proxy_buffers*2)</p> 
  <p>proxy_temp_file_write_size 64k; #设定缓存文件夹大小,大于这个值,将从upstream服务器传</p> 
  <h2>七 下载限速</h2> 
  <hr> 
  <h3>1 限速介绍</h3> 
  <p>在生产环境中,为了保护WEB服务器的安全,我们都会对用户的访问做出一些限制,保证服务器的安全及资源的合理分配。</p> 
  <p>限流(rate limiting)是NGINX众多特性中最有用的,也是经常容易被误解和错误配置的,特性之一访问请求限速。该特性可以限制某个用户在一个给定时间段内能够产生的HTTP请求数。请求可以简单到就是一个对于主页的GET请求或者一个登陆表格的POST请求。用于安全目的上,比如减慢暴力密码破解攻击。通过限制进来的请求速率,并且(结合日志)标记出目标URLs来帮助防范DDoS攻击。一般地说,限流是用在保护上游应用服务器不被在同一时刻的大量用户请求湮没</p> 
  <p>限速说的很笼统,其实限速分为很多种限速方法:</p> 
  <p>1)下载速度限速</p> 
  <p>2)单位时间内请求数限制</p> 
  <p>3)基于客户端的并发连接限速</p> 
  <p>nginx限速模块</p> 
  <p>Nginx官方版本限制IP的连接和并发分别有两个模块:</p> 
  <p>limit_req_zone 用来限制单位时间内的请求数,即速率限制,采用的漏桶算法 “leaky bucket”。</p> 
  <p>limit_req_conn 用来限制同一时间连接数,即并发限制。</p> 
  <h3>2 应用场景</h3> 
  <p>下载限速:限制下载速度及并发连接数,应用在下载服务器中,保护带宽及服务器的IO资源。</p> 
  <p>请求限速:限制单位时间内用户访问请求,防止恶意攻击,保护服务器及资源安全。</p> 
  <h3>3 限速原理</h3> 
  <p>漏桶原理</p> 
  <p><a href="http://img.e-com-net.com/image/info8/4edab5f4cb0c438dac4f7e41abe85b35.jpg" target="_blank"><img src="http://img.e-com-net.com/image/info8/4edab5f4cb0c438dac4f7e41abe85b35.jpg" alt="zutuanxue.com-nginx与LNMP_第6张图片" width="650" height="387" style="border:1px solid black;"></a></p> 
  <pre><code class="prism language-powershell">算法思想是:
    水(请求)从上方倒入水桶,从水桶下方流出(被处理);
    来不及流出的水存在水桶中(缓冲),以固定速率流出;
    水桶满后水溢出(丢弃)。
    这个算法的核心是:缓存请求、匀速处理、多余的请求直接丢弃。
    相比漏桶算法,令牌桶算法不同之处在于它不但有一只“桶”,还有个队列,这个桶是用来存放令牌的,队列才是用来存放请求的。
</code></pre> 
  <h3>4 限速实现</h3> 
  <p>1)单位时间内请求数限制</p> 
  <pre><code class="prism language-powershell"><span class="token comment">#基于IP对下载速率做限制  限制每秒处理1次请求,对突发超过5个以后的请求放入缓存区 </span>
http <span class="token punctuation">{</span>
    limit_req_zone <span class="token variable">$binary_remote_addr</span> zone=test:10m rate=1r/s<span class="token punctuation">;</span>
    server <span class="token punctuation">{</span>
        location <span class="token operator">/</span>abc <span class="token punctuation">{</span>
            limit_req zone=test burst=5 nodelay<span class="token punctuation">;</span>
        <span class="token punctuation">}</span>
<span class="token punctuation">}</span>
limit_req_zone <span class="token variable">$binary_remote_addr</span> zone=test:10m rate=1r/s<span class="token punctuation">;</span>
第一个参数:<span class="token variable">$binary_remote_addr</span> 表示通过remote_addr这个标识来做限制,“binary_”的目的是缩写内存占用量,是限制同一客户端ip地址。
第二个参数:zone=test:10m表示生成一个大小为10M,名字为test的内存区域,用来存储访问的频次信息。
第三个参数:rate=1r/s表示允许相同标识的客户端的访问频次,这里限制的是每秒1次,还可以有比如30r/m的。

limit_req zone=test burst=5 nodelay<span class="token punctuation">;</span>
第一个参数:zone=test 设置使用哪个配置区域来做限制,与上面limit_req_zone 里的name对应。
第二个参数:burst=5,重点说明一下这个配置,burst爆发的意思,这个配置的意思是设置一个大小为5的缓冲区当有大量请求(爆发)过来时,超过了访问频次限制的请求可以先放到这个缓冲区内。
第三个参数:nodelay,如果设置,超过访问频次而且缓冲区也满了的时候就会直接返回503,如果没有设置,则所有请求会等待排队。

重启nginx服务

测试机
<span class="token namespace">[root@slave tmp]</span><span class="token comment"># for i in `seq 1 10`; do (wget http://192.168.11.16/abc/bigfile -P /tmp) & done</span>
<span class="token namespace">[root@slave tmp]</span><span class="token comment"># killall wget 会出现不同的状态,有的是以退出有的是已终止</span>
</code></pre> 
  <p>2)限制并发连接数</p> 
  <pre><code class="prism language-powershell"><span class="token comment">#基于IP做连接限制  限制同一IP并发为1</span>
limit_conn_zone <span class="token variable">$binary_remote_addr</span> zone=addr:10m<span class="token punctuation">;</span>

server <span class="token punctuation">{</span>
        listen       80<span class="token punctuation">;</span>
        server_name  localhost<span class="token punctuation">;</span>

        location <span class="token operator">/</span> <span class="token punctuation">{</span>
            root   html<span class="token punctuation">;</span>
            index  index<span class="token punctuation">.</span>html index<span class="token punctuation">.</span>htm<span class="token punctuation">;</span>
        <span class="token punctuation">}</span>

        location <span class="token operator">/</span>abc <span class="token punctuation">{</span>
           limit_conn addr 1<span class="token punctuation">;</span>
        <span class="token punctuation">}</span>

    <span class="token punctuation">}</span>

<span class="token punctuation">}</span>
重启nginx服务

测试机
<span class="token namespace">[root@slave tmp]</span><span class="token comment"># for i in `seq 1 10`; do (wget http://192.168.11.16/abc/bigfile -P /tmp) & done</span>
<span class="token comment">#退出了9个只能开启一个</span>
</code></pre> 
  <p>3)限制下载速度</p> 
  <pre><code class="prism language-powershell">下载速度为100k
server <span class="token punctuation">{</span>
        listen       80<span class="token punctuation">;</span>
        server_name  localhost<span class="token punctuation">;</span>

        location <span class="token operator">/</span> <span class="token punctuation">{</span>
            root   html<span class="token punctuation">;</span>
            index  index<span class="token punctuation">.</span>html index<span class="token punctuation">.</span>htm<span class="token punctuation">;</span>
        <span class="token punctuation">}</span>

        location <span class="token operator">/</span>abc <span class="token punctuation">{</span>
           limit_rate 100k<span class="token punctuation">;</span>
        <span class="token punctuation">}</span>

    <span class="token punctuation">}</span>

<span class="token punctuation">}</span>

重启nginx服务

测试机使用wget命令测试
</code></pre> 
  <p>4)综合案例</p> 
  <p>限制web服务器请求处理为1秒一个,触发值为5;</p> 
  <p>限制并发连接数为4;</p> 
  <p>限制下载速度为100.</p> 
  <pre><code class="prism language-powershell">http <span class="token punctuation">{</span>
    include       mime<span class="token punctuation">.</span>types<span class="token punctuation">;</span>
    default_type  application/octet-stream<span class="token punctuation">;</span>

    sendfile        on<span class="token punctuation">;</span>
    keepalive_timeout  65<span class="token punctuation">;</span>
<span class="token comment">#基于IP做连接限制  限制同一IP并发为1  下载速度为100K</span>
limit_conn_zone <span class="token variable">$binary_remote_addr</span> zone=addr:10m<span class="token punctuation">;</span>
<span class="token comment">#基于IP对下载速率做限制  限制每秒处理1次请求,对突发超过5个以后的请求放入缓存区 </span>
limit_req_zone <span class="token variable">$binary_remote_addr</span> zone=one:10m rate=1r/s<span class="token punctuation">;</span>
    server <span class="token punctuation">{</span>
        listen       80<span class="token punctuation">;</span>
        server_name  localhost<span class="token punctuation">;</span>

        location <span class="token operator">/</span> <span class="token punctuation">{</span>
            root   html<span class="token punctuation">;</span>
            index  index<span class="token punctuation">.</span>html index<span class="token punctuation">.</span>htm<span class="token punctuation">;</span>
        <span class="token punctuation">}</span>

        location <span class="token operator">/</span>abc <span class="token punctuation">{</span>
           limit_req zone=one burst=5 nodelay<span class="token punctuation">;</span>
           limit_conn addr 4<span class="token punctuation">;</span>
           limit_rate 100k<span class="token punctuation">;</span>
        <span class="token punctuation">}</span>

    <span class="token punctuation">}</span>

<span class="token punctuation">}</span>
</code></pre> 
  <h2>八 URL重写</h2> 
  <hr> 
  <h3>1 URL重写介绍</h3> 
  <p>和apache等web服务软件一样,rewrite的主要功能是实现URL地址的重定向。Nginx的rewrite功能需要PCRE软件的支持,即通过perl兼容正则表达式语句进行规则匹配的。默认参数编译nginx就会支持rewrite的模块,但是也必须要PCRE的支持。</p> 
  <p>Rewrite功功能是Nginx服务器提供的一个重要功能。几乎是所有的web产品必备技能,用于实现URL重写。URL重写是非常有用的功能,比如它可以在我们在改变网站结构后,不需要客户端修改原来的书签,也不需要其他网站修改对我们网站的友情链接,还可以在一定程度上提高网站的安全性,能够让我们的网站显得更专业。</p> 
  <h3>2 应用场景</h3> 
  <p>域名变更 (京东)</p> 
  <p>用户跳转 (从某个连接跳到另一个连接)</p> 
  <p>伪静态场景 (便于CDN缓存动态页面数据)</p> 
  <h3>3 URL重写原理</h3> 
  <p><a href="http://img.e-com-net.com/image/info8/b3117740cddd452d92ca617a1d1bedd5.jpg" target="_blank"><img src="http://img.e-com-net.com/image/info8/b3117740cddd452d92ca617a1d1bedd5.jpg" alt="zutuanxue.com-nginx与LNMP_第7张图片" width="650" height="438" style="border:1px solid black;"></a></p> 
  <h3>4 URL重写</h3> 
  <p><strong>URL 模块语法</strong></p> 
  <ul> 
   <li>set 设置变量</li> 
   <li>if 负责语句中的判断</li> 
   <li>return 返回返回值或URL</li> 
   <li>break 终止后续的rewrite规则</li> 
   <li>rewrite 重定向URL</li> 
  </ul> 
  <p><strong>set指令 自定义变量</strong></p> 
  <p>Syntax: set $variable value;</p> 
  <p>Default: —</p> 
  <p>Context: server, location, if</p> 
  <pre><code class="prism language-powershell">将http:<span class="token operator">/</span><span class="token operator">/</span>www<span class="token punctuation">.</span>a<span class="token punctuation">.</span>com  重写为 http:<span class="token operator">/</span><span class="token operator">/</span>www<span class="token punctuation">.</span>a<span class="token punctuation">.</span>com/hello
location <span class="token operator">/</span> <span class="token punctuation">{</span>
                <span class="token function">set</span> <span class="token variable">$name</span> hello<span class="token punctuation">;</span>
                rewrite ^<span class="token punctuation">(</span><span class="token punctuation">.</span><span class="token operator">*</span><span class="token punctuation">)</span>$ http:<span class="token operator">/</span><span class="token operator">/</span>www<span class="token punctuation">.</span>a<span class="token punctuation">.</span>com/<span class="token variable">$name</span><span class="token punctuation">;</span>
        <span class="token punctuation">}</span>
重启nginx服务
测试机打开浏览器可以看到页面跳转
</code></pre> 
  <p><strong>if 指令 负责判断</strong></p> 
  <p>Syntax: if (condition) { … }</p> 
  <p>Default: —</p> 
  <p>Context: server, location</p> 
  <p>条件匹配</p> 
  <p>#模糊匹配 ~匹配 !~不匹配 ~* 不区分大小写的匹配</p> 
  <p>#精确匹配 = !=</p> 
  <pre><code class="prism language-powershell">location <span class="token operator">/</span> <span class="token punctuation">{</span>
                root html<span class="token punctuation">;</span>
                index index<span class="token punctuation">.</span>html index<span class="token punctuation">.</span>htm<span class="token punctuation">;</span>
                <span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token variable">$http_user_agent</span> ~<span class="token operator">*</span> <span class="token string">'Firefox'</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
                        <span class="token keyword">return</span> 403<span class="token punctuation">;</span>
                <span class="token punctuation">}</span>
        <span class="token punctuation">}</span>
重启nginx
客户机打开火狐浏览器测试,看看能否看到403
</code></pre> 
  <p><strong>return 指令 定义返回数据</strong></p> 
  <p>Syntax: return code [text];</p> 
  <p>return code URL;</p> 
  <p>return URL;</p> 
  <p>Default: —</p> 
  <p>Context: server, location, if</p> 
  <pre><code class="prism language-powershell">location <span class="token operator">/</span> <span class="token punctuation">{</span>
                root html<span class="token punctuation">;</span>
                index index<span class="token punctuation">.</span>html index<span class="token punctuation">.</span>htm<span class="token punctuation">;</span>
                <span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token variable">$http_user_agent</span> ~<span class="token operator">*</span> <span class="token string">'Firefox'</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
                        <span class="token keyword">return</span> 403<span class="token punctuation">;</span>
                <span class="token punctuation">}</span>
        <span class="token punctuation">}</span>
</code></pre> 
  <p><strong>rewrite指令 实现重写url</strong></p> 
  <p><strong>rewrite [flag];</strong></p> 
  <p><strong>关键字 正则 替代内容 flag标记</strong></p> 
  <p><strong>flag:</strong></p> 
  <ul> 
   <li>last #本条规则匹配完成后,继续向下匹配新的location URI规则</li> 
   <li>break #本条规则匹配完成即终止,不再匹配后面的任何规则</li> 
   <li>redirect #返回302临时重定向,浏览器地址会显示跳转后的URL地址</li> 
   <li>permanent #返回301永久重定向,浏览器地址栏会显示跳转后的URL地址</li> 
  </ul> 
  <p><strong>permanent标志:永久重定向</strong></p> 
  <pre><code class="prism language-powershell">域名跳转
www<span class="token punctuation">.</span>a<span class="token punctuation">.</span>com     重写为  www<span class="token punctuation">.</span>b<span class="token punctuation">.</span>com
server <span class="token punctuation">{</span>
        listen        80<span class="token punctuation">;</span>
        server_name www<span class="token punctuation">.</span>a<span class="token punctuation">.</span>com<span class="token punctuation">;</span>
        location <span class="token operator">/</span> <span class="token punctuation">{</span>
            rewrite ^<span class="token operator">/</span>$ http:<span class="token operator">/</span><span class="token operator">/</span>www<span class="token punctuation">.</span>b<span class="token punctuation">.</span>com permanent<span class="token punctuation">;</span>

          <span class="token punctuation">}</span>
<span class="token punctuation">}</span>
</code></pre> 
  <p><strong>redirect标志:临时重定向</strong></p> 
  <pre><code class="prism language-powershell">域名跳转
www<span class="token punctuation">.</span>a<span class="token punctuation">.</span>com     重写为  www<span class="token punctuation">.</span>b<span class="token punctuation">.</span>com
server <span class="token punctuation">{</span>
        listen        80<span class="token punctuation">;</span>
        server_name www<span class="token punctuation">.</span>a<span class="token punctuation">.</span>com<span class="token punctuation">;</span>
        location <span class="token operator">/</span> <span class="token punctuation">{</span>
            rewrite ^<span class="token operator">/</span>$ http:<span class="token operator">/</span><span class="token operator">/</span>www<span class="token punctuation">.</span>b<span class="token punctuation">.</span>com redirect<span class="token punctuation">;</span>

          <span class="token punctuation">}</span>
<span class="token punctuation">}</span>
</code></pre> 
  <p><strong>break标志: 类似临时重定向</strong></p> 
  <pre><code class="prism language-powershell">域名跳转
www<span class="token punctuation">.</span>a<span class="token punctuation">.</span>com     重写为  www<span class="token punctuation">.</span>b<span class="token punctuation">.</span>com
server <span class="token punctuation">{</span>
        listen        80<span class="token punctuation">;</span>
        server_name www<span class="token punctuation">.</span>a<span class="token punctuation">.</span>com<span class="token punctuation">;</span>
        location <span class="token operator">/</span> <span class="token punctuation">{</span>
            rewrite ^<span class="token operator">/</span>$ http:<span class="token operator">/</span><span class="token operator">/</span>www<span class="token punctuation">.</span>b<span class="token punctuation">.</span>com <span class="token keyword">break</span><span class="token punctuation">;</span>

          <span class="token punctuation">}</span>
<span class="token punctuation">}</span>
</code></pre> 
  <p><strong>last标志:</strong></p> 
  <p>url重写后,马上发起一个新的请求,再次进入server块,重试location匹配,超过10次匹配不到报500错误,地址栏url不变</p> 
  <p>last 一般出现在server或if中</p> 
  <p>根据用户浏览器重写访问目录</p> 
  <pre><code class="prism language-powershell">如果是firefox浏览器  就将  
http:<span class="token operator">/</span><span class="token operator">/</span>192<span class="token punctuation">.</span>168<span class="token punctuation">.</span>11<span class="token punctuation">.</span>16/<span class="token variable">$URI</span>
   重写为  
http:<span class="token operator">/</span><span class="token operator">/</span>192<span class="token punctuation">.</span>168<span class="token punctuation">.</span>11<span class="token punctuation">.</span>16/firefox/<span class="token variable">$URI</span>

实现 步骤
1)URL重写
2)请求转给本机location



location <span class="token operator">/</span> <span class="token punctuation">{</span>
<span class="token punctuation">.</span><span class="token punctuation">.</span><span class="token punctuation">.</span><span class="token punctuation">.</span><span class="token punctuation">.</span>
<span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token variable">$http_user_agent</span> ~<span class="token operator">*</span> <span class="token string">'firefox'</span><span class="token punctuation">)</span><span class="token punctuation">{</span>
          <span class="token comment">#^ 以什么开头 ^a</span>
          <span class="token comment">#$ 以什么结尾 c$</span>
          <span class="token comment">#. 除了回车以外的任意一个字符</span>
          <span class="token comment">#* 前面的字符可以出现多次或者不出现</span>
          <span class="token comment">#更多内容看正则表达式</span>
          rewrite ^<span class="token punctuation">(</span><span class="token punctuation">.</span><span class="token operator">*</span><span class="token punctuation">)</span>$ <span class="token operator">/</span>firefox/<span class="token variable">$1</span> last<span class="token punctuation">;</span>
          <span class="token punctuation">}</span>


       location <span class="token operator">/</span>firefox <span class="token punctuation">{</span>
          root html <span class="token punctuation">;</span>
          index index<span class="token punctuation">.</span>html<span class="token punctuation">;</span>
        <span class="token punctuation">}</span>
<span class="token punctuation">}</span>
<span class="token namespace">[root@localhost html]</span><span class="token comment"># pwd</span>
<span class="token operator">/</span>usr/local/nginx/html
<span class="token namespace">[root@localhost html]</span><span class="token comment"># mkdir firefox</span>
<span class="token namespace">[root@localhost html]</span><span class="token comment"># echo firefox > firefox/index.html</span>
<span class="token namespace">[root@localhost html]</span><span class="token comment"># killall  nginx</span>
<span class="token namespace">[root@localhost html]</span><span class="token comment"># /usr/local/nginx/sbin/nginx </span>
客户机浏览器测试
</code></pre> 
  <h2>九 nginx优化</h2> 
  <hr> 
  <h3>1 并发优化</h3> 
  <p>nginx工作模式:主进程+工作进程</p> 
  <pre><code class="prism language-powershell">启动工作进程数量
worker_processes  4<span class="token punctuation">;</span>
<span class="token comment">#指定运行的核的编号,采用掩码的方式设置编号</span>
worker_cpu_affinity   0001 0010 0100 1000<span class="token punctuation">;</span>


events <span class="token punctuation">{</span>
单个工作进程维护的请求队列长度
    worker_connections  1024<span class="token punctuation">;</span>
<span class="token punctuation">}</span>
</code></pre> 
  <h3>2 长连接</h3> 
  <p>减少服务器维护因为与客户端建立http连接产生的大量tcp三次握手四次断开的开销</p> 
  <pre><code class="prism language-powershell">keepalive_timeout  0<span class="token punctuation">;</span>  0代表关闭
<span class="token comment">#keepalive_timeout  100;</span>
<span class="token comment">#keepalive_requests 8192;</span>
</code></pre> 
  <h3>3 压缩</h3> 
  <p>降低传输时间,增加用户体验度;降低公司带宽费用。</p> 
  <pre><code class="prism language-powershell">gzip  on<span class="token punctuation">;</span>
gzip_proxied any<span class="token punctuation">;</span>
gzip_min_length 1k<span class="token punctuation">;</span>
gzip_buffers 4 8k<span class="token punctuation">;</span>
gzip_comp_level 6<span class="token punctuation">;</span>
gzip_types text/plain text/css application/x-javascript application/javascript application/xml<span class="token punctuation">;</span>


<span class="token comment"># 开启gzip</span>
    gzip off<span class="token punctuation">;</span>

    <span class="token comment"># 启用gzip压缩的最小文件,小于设置值的文件将不会压缩</span>
    gzip_min_length 1k<span class="token punctuation">;</span>

    <span class="token comment"># gzip 压缩级别,1-9,数字越大压缩的越好,也越占用CPU时间,后面会有详细说明</span>
    gzip_comp_level 1<span class="token punctuation">;</span>

    <span class="token comment"># 进行压缩的文件类型。javascript有多种形式。其中的值可以在 mime.types 文件中找到。</span>
    gzip_types text/plain application/javascript application/x-javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png application/vnd<span class="token punctuation">.</span>ms-fontobject font/ttf font/opentype font/x-woff image/svg+xml<span class="token punctuation">;</span>

    <span class="token comment"># 是否在http header中添加Vary: Accept-Encoding,建议开启</span>
    gzip_vary on<span class="token punctuation">;</span>

    <span class="token comment"># 禁用IE 6 gzip</span>
    gzip_disable <span class="token string">"MSIE [1-6]\."</span><span class="token punctuation">;</span>

    <span class="token comment"># 设置压缩所需要的缓冲区大小     </span>
    gzip_buffers 32 4k<span class="token punctuation">;</span>

    <span class="token comment"># 设置gzip压缩针对的HTTP协议版本</span>
    gzip_http_version 1<span class="token punctuation">.</span>0<span class="token punctuation">;</span>
</code></pre> 
  <h3>4 静态缓存</h3> 
  <p>将部分数据缓存在用户本地磁盘,用户加载时,如果本地和服务器的数据一致,则从本地加载。提升用户访问速度,提升体验度。节省公司带宽成本。</p> 
  <pre><code class="prism language-powershell">expires指令:开启缓存并指定静态缓存时间

location ~<span class="token operator">*</span>  \<span class="token punctuation">.</span><span class="token punctuation">(</span>png<span class="token punctuation">|</span>gif<span class="token punctuation">)</span>$ <span class="token punctuation">{</span>
              expires 1h<span class="token punctuation">;</span>
         <span class="token punctuation">}</span>
</code></pre> 
  <h2>十 LNMP</h2> 
  <h3>介绍</h3> 
  <p>说到LNMP,我们不得不提到LAMP,我们知道,LAMP是一个多C/S架构的平台,在此架构中web客户端基于TCP/IP通过http协议发起传送,这个请求可能是静态的也可能是动态的。所以web服务器通过发起请求的后缀来判断,如果是静态的就由web服务器自行处理,然后将资源发给客户端。如果是动态的web服务器会通过CGI(Common Gateway Interfence)协议发起给php。如果php以模块形式与web服务器联系,那么它们是通过内部共享内存的方式,如果php单独的一台服务器,那么它们是以sockets套接字的方式进行通信(这又是一个C/S架构),这时php会相应的执行一段程序,如果在程序执行时需要一些数据,那么php就会通过 mysql协议发送给mysql服务器(这也可以看作是一个C/S架构),由mysql服务器处理,将数据供给php程序。</p> 
  <p><strong>LNMP</strong></p> 
  <p>是指一组通常一起使用来运行动态网站或者服务器的自由软件名称首字母缩写。L指Linux,N指Nginx,M一般指MySQL,也可以指MariaDB,P一般指PHP,也可以指Perl或Python。LNMP架构和LAMP架构挺像的,只不过一个用的Apache一个用的Nginx。LNMP就是Linux+Nginx+MySQL/mairadb+PHP,Nginx和Apache一样都是web服务器。还有一点不同的是在LNMP结构里php会启动一个php-fpm服务,而大多数时候LANP中的php只是作为Apache的一个模块存在(在CentOS8中LAMP架构也启动php-fpm服务)。</p> 
  <p>Nginx会把用户的动态页面请求交给php服务去处理,这个php服务就会去和数据库进行交互。用户的静态页面请求Nginx会直接处理,Nginx处理静态请求的速度要比apache快很多性能上要好,所以apache和Nginx在动态请求处理上区别不大,但如果是静态请求处理的话就会明显发现Nginx要快于apache,而且Nginx能承受的并发量要比apache大,可以承受好几万的并发量,所以大一些的网站都会使用Nginx作为web服务器。</p> 
  <h3>动态页面和静态页面</h3> 
  <p><strong>静态网页:</strong></p> 
  <p>(1)静态网页不能简单地理解成静止不动的网页,他主要指的是网页中没有程序代码,只有HTML(即:超文本标记语言),一般后缀为.html,.htm,或者.xml等。虽然静态网页的页面一旦做成,内容就不会再改变了。但是,静态网页也包括一些能动的部分,这些主要是一些GIF动画等</p> 
  <p>(2)静态网页的打开,用户可以直接双击,并且不管任何人任何时间打开的页面的内容都是不变的。</p> 
  <p><strong>动态网页:</strong></p> 
  <p>(1)动态网页是指跟静态网页相对的一种网页编程技术。动态网页的网页文件中除了HTML标记以外,还包括一些特定功能的程序代码,这些代码可以使得浏览器和服务器可以交互,所以服务器端根据客户的不同请求动态的生成网页内容。即:动态网页相对于静态网页来说,页面代码虽然没有变,但是显示的内容却是可以随着时间、环境或者数据库操作的结果而发生改变的。</p> 
  <p>(2)动态网页,与网页上的各种动画、滚动字幕等视觉上的动态效果没有直接关系,动态网页也可以是纯文字内容的,也可以是包含各种动画的内容,这些只是网页具体内容的表现形式,无论网页是否具有动态效果,只要是采用了动态网站技术(如PHP、ASP、JSP等)生成的网页都可以称为动态网页。</p> 
  <p><strong>动态网页和静态网页的区别:</strong></p> 
  <p><strong>(1)更新和维护:</strong></p> 
  <p>静态网页内容一经发布到网站服务器上,无论是否有用户访问,这些网页内容都是保存在网站服务器上的。如果要修改网页的内容,就必须修改其源代码,然后重新上传到服务器上。静态网页没有数据库的支持,当网站信息量很大的时候网页的制作和维护都很困难</p> 
  <p>动态网页可以根据不同的用户请求,时间或者环境的需求动态的生成不同的网页内容,并且动态网页一般以数据库技术为基础,可以大大降低网站维护的工作量</p> 
  <p><strong>(2)交互性:</strong></p> 
  <p>静态网页由于很多内容都是固定的,在功能方面有很大的限制,所以交互性较差</p> 
  <p>动态网页则可以实现更多的功能,如用户的登录、注册、查询等</p> 
  <p><strong>(3)响应速度:</strong></p> 
  <p>静态网页内容相对固定,容易被搜索引擎检索,且不需要连接数据库,因此响应速度较快</p> 
  <p>动态网页实际上并不是独立存在于服务器上的网页文件,只有当用户请求时服务器才返回一个完整的网页,其中涉及到数据的连接访问和查询等一系列过程,所以响应速度相对较慢</p> 
  <p><strong>(4)访问特点:</strong></p> 
  <p>静态网页的每个网页都有一个固定的URL,且网页URL以.htm、.html、.shtml等常见形式为后缀,而不含有“?”,可以直接双击打开</p> 
  <p>动态网页中的“?”对搜索引擎检索存在一定的问题,搜索引擎一般不可能从一个网站的数据库中访问全部网页,或者出于技术方面的考虑,搜索之中不去抓取网址中“?”后面的内容,不能直接双击打开</p> 
  <p><strong>综上所述</strong></p> 
  <p>如果网页内容相对的简单,不需要频繁的进行改动,或者只是为了展示信息等,就用静态网页,简单易操作,不需要管理数据库等</p> 
  <p>如果网页内容相对复杂,功能多,改动频繁,实时性的内容多,就用动态网页</p> 
  <h3>LNMP架构工作流程</h3> 
  <p><a href="http://img.e-com-net.com/image/info8/3e1e3cd5d6ac48ce9691e4440a7fc159.jpg" target="_blank"><img src="http://img.e-com-net.com/image/info8/3e1e3cd5d6ac48ce9691e4440a7fc159.jpg" alt="zutuanxue.com-nginx与LNMP_第8张图片" width="538" height="239" style="border:1px solid black;"></a></p> 
  <ul> 
   <li>用户发送http请求到达http服务器</li> 
   <li>httpd解析URL获取需要的资源的路径,通过内核空间来读取硬盘资源,如果是静态资源,则构建响应报文发回给用户。</li> 
   <li>如果是动态资源,将资源地址发送给php解析器,解析php程序文件,解析完毕将内容发回给httpd,httpd构建响应报文,发回给用户。</li> 
   <li>如果涉及到数据库操作,则利用php-mysql驱动,获取数据库数据,返回给PHP解析器。</li> 
  </ul> 
  <h3>案例</h3> 
  <p>利用LNMP+wordpress搭建博客网站</p> 
  <p><strong>WordPress</strong></p> 
  <p>一款使用PHP语言开发的博客平台,用户可以在支持PHP和MySQL数据库的服务器上架设属于自己的网站。也可以把 WordPress当作一个内容管理系统来使用。WordPress以上手简单、功能强大、扩展性与灵活性著称,加上开源免费,主题插件极其丰富,无论作为新手学习搭建个人博客,还是专业用户用于架设复杂的企业电商网站、论坛等,WP 都能完美满足需求。你几乎能用 WP 打造成任何类型的网站,只有想不到,没有做不到。而且全球数以亿计各类知名网站都是基于 WP 构建,根据官方统计,目前全球有 32% 的网站都由 WP 搭建,由于它实在太过流行,因此无论插件、主题、教程、文档等资源都极其丰富,你选都选不完。而且网上关于性能优化、问题解决等讨论也非常的全面。基本上学习建网站这事,您只需玩转 WP 就够了!所以,如果要建站或想尝试学习建站,那 WP 绝对值得你优先考虑。</p> 
  <p>wordpress官网:https://cn.wordpress.org打开可能会有问题 (429错误),可以去https://ww.wp.xz.cn下载软件包</p> 
  <p><strong>环境介绍</strong></p> 
  <p>一台安装CentOS8的主机</p> 
  <p>关闭SElinux和防火墙</p> 
  <p>配置好yum源</p> 
  <p>挂载光盘</p> 
  <p>可以联网</p> 
  <p>wordpress软件包下载地址:https://ww.wp.xz.cn/latest.zip</p> 
  <p><strong>流程</strong></p> 
  <p>step1 部署LNMP架构</p> 
  <pre><code class="prism language-powershell"><span class="token namespace">[root@client ~]</span><span class="token comment"># dnf -y install nginx php* mariadb-server mariadb -y</span>
</code></pre> 
  <p>step2 设置php-fpm</p> 
  <pre><code class="prism language-powershell"><span class="token namespace">[root@client ~]</span><span class="token comment"># vim /etc/php-fpm.d/www.conf </span>
user = nginx
<span class="token function">group</span> = nginx

<span class="token comment">#php-fpm服务默认以apache用户启动,将启动用户身份修改nginx</span>
</code></pre> 
  <p>step3 启动服务</p> 
  <pre><code class="prism language-powershell"><span class="token namespace">[root@client ~]</span><span class="token comment"># systemctl restart nginx.service php-fpm.service mariadb.service </span>
</code></pre> 
  <p>step4 生成php测试页面</p> 
  <pre><code class="prism language-powershell"><span class="token namespace">[root@client ~]</span><span class="token comment"># echo "<?php phpinfo();?>" >> /usr/share/nginx/html/index.php</span>
<span class="token comment">#系统自带的nginx的页面文件存放在/usr/share/nginx/html/目录中</span>
</code></pre> 
  <p>step5 打开浏览器测试</p> 
  <p><a href="http://img.e-com-net.com/image/info8/cc6615f02ff84a0faddcf7ed79c8cad6.jpg" target="_blank"><img src="http://img.e-com-net.com/image/info8/cc6615f02ff84a0faddcf7ed79c8cad6.jpg" alt="zutuanxue.com-nginx与LNMP_第9张图片" width="650" height="197" style="border:1px solid black;"></a></p> 
  <p>step6 为数据库设置密码并创建相应的数据库</p> 
  <pre><code class="prism language-powershell"><span class="token namespace">[root@client ~]</span><span class="token comment"># mysqladmin -u root password 123456</span>
<span class="token namespace">[root@client ~]</span><span class="token comment"># mysql -u root -p</span>
Enter password: 

MariaDB <span class="token punctuation">[</span><span class="token punctuation">(</span>none<span class="token punctuation">)</span><span class="token punctuation">]</span>> create database wordpress charset=utf8<span class="token punctuation">;</span>
Query OK<span class="token punctuation">,</span> 1 row affected <span class="token punctuation">(</span>0<span class="token punctuation">.</span>001 sec<span class="token punctuation">)</span>

MariaDB <span class="token punctuation">[</span><span class="token punctuation">(</span>none<span class="token punctuation">)</span><span class="token punctuation">]</span>> quit
Bye
</code></pre> 
  <p>step7 准备wordpress</p> 
  <pre><code class="prism language-powershell"><span class="token namespace">[root@client ~]</span><span class="token comment"># cd /usr/share/nginx/html/</span>
<span class="token namespace">[root@client html]</span><span class="token comment"># rm -fr *</span>
<span class="token comment">#####删除nginx自带的页面文件,以及刚才测试生成的php页面</span>


<span class="token namespace">[root@client ~]</span><span class="token comment"># unzip latest-zh_CN.zip </span>
<span class="token namespace">[root@client ~]</span><span class="token comment"># cd wordpress/</span>
<span class="token namespace">[root@client wordpress]</span><span class="token comment"># mv * /usr/share/nginx/html/</span>
<span class="token comment">####将wordpress文件移动到nginx页面文件存放的目录</span>


<span class="token namespace">[root@client wordpress]</span><span class="token comment"># cd /usr/share/nginx/html/</span>
<span class="token namespace">[root@client html]</span><span class="token comment"># chown -R nginx.nginx *</span>
<span class="token comment">###文件的默认所有者是root,为了避免权限的问题,将所有者改为nginx</span>
</code></pre> 
  <p>step8 安装wordpress</p> 
  <p><strong>后续图片步骤见标题,图片太多,调整不过来了…</strong></p> 
  <h2>总结</h2> 
  <p>什么是nginx</p> 
  <p>​ 它可以做什么</p> 
  <p>​ nginx有哪些优点和缺点</p> 
  <p>​ 如何安装部署</p> 
  <p>​ 配置文件的字段含义</p> 
  <p>​ nginx的基本使用</p> 
  <p>​ 虚拟主机的使用</p> 
  <p>​ 反向代理、限速</p> 
  <p>​ URL重写、优化</p> 
  <p>重点:nginx的安装部署,配置文件字段含义,基本功能的使用,虚拟主机的使用,如何实现反向代理,如何实现URL重写</p> 
  <p>难点:配置文件字段及格式,各种基本功能使用,虚拟主机如何去设置,反向代理如何去设置,如何实现URL重写</p> 
 </div> 
</div>
                            </div>
                        </div>
                    </div>
                    <!--PC和WAP自适应版-->
                    <div id="SOHUCS" sid="1686445266166689792"></div>
                    <script type="text/javascript" src="/views/front/js/chanyan.js"></script>
                    <!-- 文章页-底部 动态广告位 -->
                    <div class="youdao-fixed-ad" id="detail_ad_bottom"></div>
                </div>
                <div class="col-md-3">
                    <div class="row" id="ad">
                        <!-- 文章页-右侧1 动态广告位 -->
                        <div id="right-1" class="col-lg-12 col-md-12 col-sm-4 col-xs-4 ad">
                            <div class="youdao-fixed-ad" id="detail_ad_1"> </div>
                        </div>
                        <!-- 文章页-右侧2 动态广告位 -->
                        <div id="right-2" class="col-lg-12 col-md-12 col-sm-4 col-xs-4 ad">
                            <div class="youdao-fixed-ad" id="detail_ad_2"></div>
                        </div>
                        <!-- 文章页-右侧3 动态广告位 -->
                        <div id="right-3" class="col-lg-12 col-md-12 col-sm-4 col-xs-4 ad">
                            <div class="youdao-fixed-ad" id="detail_ad_3"></div>
                        </div>
                    </div>
                </div>
            </div>
        </div>
    </div>
    <div class="container">
        <h4 class="pt20 mb15 mt0 border-top">你可能感兴趣的:(Linux,云计算,CentOS,linux,运维,centos,云计算)</h4>
        <div id="paradigm-article-related">
            <div class="recommend-post mb30">
                <ul class="widget-links">
                    <li><a href="/article/1773603578330546176.htm"
                           title="Flink中的SQL Client和SQL Gateway" target="_blank">Flink中的SQL Client和SQL Gateway</a>
                        <span class="text-muted">BigDataMLApplication</span>
<a class="tag" taget="_blank" href="/search/flink/1.htm">flink</a><a class="tag" taget="_blank" href="/search/flink/1.htm">flink</a><a class="tag" taget="_blank" href="/search/sql/1.htm">sql</a><a class="tag" taget="_blank" href="/search/gateway/1.htm">gateway</a>
                        <div>Flink中的SQLClient和SQLGateway对比目录定义基本原理适用场景主要区别常用运维命令示例官方链接正文1.定义SQLClient:FlinkSQLClient是一种用于提交和执行FlinkSQL语句的命令行界面或图形界面工具。SQLGateway:FlinkSQLGateway是一个独立的服务,它允许客户端通过RESTfulAPI将SQL查询提交到Flink集群。2.基本原理SQL</div>
                    </li>
                    <li><a href="/article/1773603579169406976.htm"
                           title="2022年河南省高等职业教育技能大赛云计算赛项竞赛赛卷(样卷)" target="_blank">2022年河南省高等职业教育技能大赛云计算赛项竞赛赛卷(样卷)</a>
                        <span class="text-muted">忘川_ydy</span>
<a class="tag" taget="_blank" href="/search/%E4%BA%91%E8%AE%A1%E7%AE%97/1.htm">云计算</a><a class="tag" taget="_blank" href="/search/%E4%BA%91%E8%AE%A1%E7%AE%97/1.htm">云计算</a><a class="tag" taget="_blank" href="/search/openstack/1.htm">openstack</a><a class="tag" taget="_blank" href="/search/kubernetes/1.htm">kubernetes</a><a class="tag" taget="_blank" href="/search/docker/1.htm">docker</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/k8s/1.htm">k8s</a><a class="tag" taget="_blank" href="/search/ansible/1.htm">ansible</a>
                        <div>#需要资源(软件包及镜像)或有问题的,可私博主!!!#需要资源(软件包及镜像)或有问题的,可私博主!!!#需要资源(软件包及镜像)或有问题的,可私博主!!!第一部分:私有云任务1私有云服务搭建(10分)使用提供的用户名密码,登录竞赛用的云计算平台,按要求自行使用镜像创建两台云主机,创建完云主机后确保网络正常通信,然后按要求配置服务器。根据提供安装脚本框架,补充脚本完成OpenStack平台的安装搭</div>
                    </li>
                    <li><a href="/article/1773602697044361216.htm"
                           title="浪潮 M5系列服务器IPMI无法监控存储RAID卡问题." target="_blank">浪潮 M5系列服务器IPMI无法监控存储RAID卡问题.</a>
                        <span class="text-muted">Songxwn</span>
<a class="tag" taget="_blank" href="/search/%E7%A1%AC%E4%BB%B6%E6%9C%8D%E5%8A%A1%E5%99%A8/1.htm">硬件服务器</a><a class="tag" taget="_blank" href="/search/%E6%9C%8D%E5%8A%A1%E5%99%A8/1.htm">服务器</a><a class="tag" taget="_blank" href="/search/%E8%BF%90%E7%BB%B4/1.htm">运维</a>
                        <div>简介浪潮的M5代服务器,可能有WebBMC无法查看存储RAID/SAS卡状态的情况,可以通过以下方式修改。修改完成后重启BMC即可生效。ESXiIPMITools使用:https://songxwn.com/ESXi8_IPMI/(Linux也可以直接使用)Linux/ESXiIPMITool下载:https://songxwn.com/file/ipmitoolWindows下载:https:/</div>
                    </li>
                    <li><a href="/article/1773597535798099968.htm"
                           title="unblock with ‘mysqladmin flush-hosts‘ 解决方法" target="_blank">unblock with ‘mysqladmin flush-hosts‘ 解决方法</a>
                        <span class="text-muted">祈祷平安,加油</span>
<a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E5%BA%93%E5%B8%B8%E8%A7%81%E9%97%AE%E9%A2%98/1.htm">数据库常见问题</a><a class="tag" taget="_blank" href="/search/oracle/1.htm">oracle</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E5%BA%93/1.htm">数据库</a>
                        <div>MySqlHostisblockedbecauseofmanyconnectionerrors;unblockwith'mysqladminflush-hosts'解决方法环境:linux,mysql5.5.21错误:Hostisblockedbecauseofmanyconnectionerrors;unblockwith'mysqladminflush-hosts'原因:同一个ip在短时间内产</div>
                    </li>
                    <li><a href="/article/1773552600176721920.htm"
                           title="1.计算机处理器架构+嵌入式处理器架构及知识" target="_blank">1.计算机处理器架构+嵌入式处理器架构及知识</a>
                        <span class="text-muted">vv 啊</span>
<a class="tag" taget="_blank" href="/search/arm-linux%E5%AD%A6%E4%B9%A0/1.htm">arm-linux学习</a><a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a><a class="tag" taget="_blank" href="/search/%E7%B3%BB%E7%BB%9F%E6%9E%B6%E6%9E%84/1.htm">系统架构</a>
                        <div>目录一:x86-64处理器架构二:Intel80386处理器(i386)1.i3862.i686三:嵌入式Linux知识:1.MinGW2.GNU计划2.1GNU工具链概述此次只分享英特尔和ADM处理器有关于x86的架构,至于嵌入式处理器架构请查看https://en.wikipedia.org/wiki/List_of_ARM_processors一:x86-64处理器架构x86-64,也称为x</div>
                    </li>
                    <li><a href="/article/1773528182234873856.htm"
                           title="springboot集成logback-spring.xml文件" target="_blank">springboot集成logback-spring.xml文件</a>
                        <span class="text-muted">RT_0114</span>
<a class="tag" taget="_blank" href="/search/SpringBoot/1.htm">SpringBoot</a><a class="tag" taget="_blank" href="/search/spring/1.htm">spring</a><a class="tag" taget="_blank" href="/search/boot/1.htm">boot</a><a class="tag" taget="_blank" href="/search/spring/1.htm">spring</a><a class="tag" taget="_blank" href="/search/logback/1.htm">logback</a>
                        <div>彩色日志日志分debug和error文件输出,方便开发人员运维日志限制最大保管天数日志限制总量大小占用量GB日志限制单个文件大小MB日志显示最大保留天数屏蔽没用的日志${CONSOLE_LOG_PATTERN}${log.path}/debug.log${log.path}/%d{yyyy-MM-dd,aux}/debug.%d{yyyy-MM-dd}.%i.log.gz1024MB50GB365</div>
                    </li>
                    <li><a href="/article/1773505900905037824.htm"
                           title="linux基础命令(一)" target="_blank">linux基础命令(一)</a>
                        <span class="text-muted">运维搬运工</span>
<a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a><a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a><a class="tag" taget="_blank" href="/search/%E6%9C%8D%E5%8A%A1%E5%99%A8/1.htm">服务器</a><a class="tag" taget="_blank" href="/search/centos/1.htm">centos</a>
                        <div>Linux基础命令1、设置主机名1.1、hostname查看主机名[root@ansible~]#cat/etc/hostnameansible或[root@ansible~]#hostnameansible注意:主机名中不允许使用下划线“_”,可以用短横线“-”1.2、hostname临时修改主机名#临时修改直接修改的是内存中的,重启会失效[root@ansible~]#hostnameansi</div>
                    </li>
                    <li><a href="/article/1773489909345091584.htm"
                           title="docker基础(一)" target="_blank">docker基础(一)</a>
                        <span class="text-muted">运维搬运工</span>
<a class="tag" taget="_blank" href="/search/%E5%AE%B9%E5%99%A8-docker/1.htm">容器-docker</a><a class="tag" taget="_blank" href="/search/docker/1.htm">docker</a><a class="tag" taget="_blank" href="/search/%E5%AE%B9%E5%99%A8/1.htm">容器</a><a class="tag" taget="_blank" href="/search/%E8%BF%90%E7%BB%B4/1.htm">运维</a>
                        <div>相关概念介绍Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖到一个可移植的容器中,然后发布到任何流行的linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,互相之间不会有任何接口。Docker有几个重要概念:dockerfile,配置文件,用来生成dockerimagedockerimage,交付部署的最小单元docker命令与API,定义命令与接口,支持第三方系统集</div>
                    </li>
                    <li><a href="/article/1773471029155397632.htm"
                           title="网络安全(黑客)——自学2024" target="_blank">网络安全(黑客)——自学2024</a>
                        <span class="text-muted">小言同学喜欢挖漏洞</span>
<a class="tag" taget="_blank" href="/search/web%E5%AE%89%E5%85%A8/1.htm">web安全</a><a class="tag" taget="_blank" href="/search/%E5%AE%89%E5%85%A8/1.htm">安全</a><a class="tag" taget="_blank" href="/search/%E7%BD%91%E7%BB%9C/1.htm">网络</a><a class="tag" taget="_blank" href="/search/%E5%AD%A6%E4%B9%A0/1.htm">学习</a><a class="tag" taget="_blank" href="/search/%E7%BD%91%E7%BB%9C%E5%AE%89%E5%85%A8/1.htm">网络安全</a><a class="tag" taget="_blank" href="/search/%E4%BF%A1%E6%81%AF%E5%AE%89%E5%85%A8/1.htm">信息安全</a><a class="tag" taget="_blank" href="/search/%E6%B8%97%E9%80%8F%E6%B5%8B%E8%AF%95/1.htm">渗透测试</a>
                        <div>01什么是网络安全网络安全可以基于攻击和防御视角来分类,我们经常听到的“红队”、“渗透测试”等就是研究攻击技术,而“蓝队”、“安全运营”、“安全运维”则研究防御技术。无论网络、Web、移动、桌面、云等哪个领域,都有攻与防两面性,例如Web安全技术,既有Web渗透,也有Web防御技术(WAF)。作为一个合格的网络安全工程师,应该做到攻守兼备,毕竟知己知彼,才能百战百胜。02怎样规划网络安全如果你是一</div>
                    </li>
                    <li><a href="/article/1773470776930926592.htm"
                           title="黑客(网络安全)技术自学30天" target="_blank">黑客(网络安全)技术自学30天</a>
                        <span class="text-muted">一个迷人的黑客</span>
<a class="tag" taget="_blank" href="/search/web%E5%AE%89%E5%85%A8/1.htm">web安全</a><a class="tag" taget="_blank" href="/search/%E5%AE%89%E5%85%A8/1.htm">安全</a><a class="tag" taget="_blank" href="/search/%E7%BD%91%E7%BB%9C/1.htm">网络</a><a class="tag" taget="_blank" href="/search/%E7%AC%94%E8%AE%B0/1.htm">笔记</a><a class="tag" taget="_blank" href="/search/%E7%BD%91%E7%BB%9C%E5%AE%89%E5%85%A8/1.htm">网络安全</a><a class="tag" taget="_blank" href="/search/%E4%BF%A1%E6%81%AF%E5%AE%89%E5%85%A8/1.htm">信息安全</a><a class="tag" taget="_blank" href="/search/%E6%B8%97%E9%80%8F%E6%B5%8B%E8%AF%95/1.htm">渗透测试</a>
                        <div>01什么是网络安全网络安全可以基于攻击和防御视角来分类,我们经常听到的“红队”、“渗透测试”等就是研究攻击技术,而“蓝队”、“安全运营”、“安全运维”则研究防御技术。无论网络、Web、移动、桌面、云等哪个领域,都有攻与防两面性,例如Web安全技术,既有Web渗透,也有Web防御技术(WAF)。作为一个合格的网络安全工程师,应该做到攻守兼备,毕竟知己知彼,才能百战百胜。02怎样规划网络安全如果你是一</div>
                    </li>
                    <li><a href="/article/1773413750980804608.htm"
                           title="linux安装docker及docker-compose 部署spring boot项目" target="_blank">linux安装docker及docker-compose 部署spring boot项目</a>
                        <span class="text-muted">时而有事儿</span>
<a class="tag" taget="_blank" href="/search/docker/1.htm">docker</a><a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a><a class="tag" taget="_blank" href="/search/docker/1.htm">docker</a><a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a><a class="tag" taget="_blank" href="/search/spring/1.htm">spring</a><a class="tag" taget="_blank" href="/search/boot/1.htm">boot</a>
                        <div>linux系统环境:centos5.14本篇描述的是在centos系统版本下安装docker,如果是ubuntu版本,请看这篇文章:linuxubuntu20安装docker和docker-compose-CSDN博客正文:安装docker和docker-compose安装docker---------运行命名等待安装完成遇到选择直接输入yyuminstall-yyum-utilsdevice-m</div>
                    </li>
                    <li><a href="/article/1773406951456178176.htm"
                           title="检测usb口HotPlug-netlink" target="_blank">检测usb口HotPlug-netlink</a>
                        <span class="text-muted">cany1000</span>
<a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a>
                        <div>为了完成内核空间与用户空间通信,Linux提供了基于Socket的NetLink通信机制。SELinux,Linux系统的防火墙分为内核态的netfilter和用户态的iptables,netfilter与iptables的数据交换就是通过Netlink机制完成。下面看一个检测usb口的例子:s32InitUsbHotPlug(void){s32nSockFd=0;//套接字地址structsoc</div>
                    </li>
                    <li><a href="/article/1773377374927257600.htm"
                           title="Linux学习系列之vim编辑器(一)" target="_blank">Linux学习系列之vim编辑器(一)</a>
                        <span class="text-muted">llibertyll</span>
<a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a><a class="tag" taget="_blank" href="/search/%E5%AD%A6%E4%B9%A0/1.htm">学习</a>
                        <div>vi编辑器的操作模式输入模式—aio等—>命令模式<—:键—末行模式从输入/末行模式切换到命令模式都是需要按ESC键注:a光标后输入,i光标前输入,o直接向下加一行输入,O向上加一行输入在vi编辑器中光标的移动(命令行模式下)键组合(命令)光标的移动$光标移动到当前行的结尾0(零)光标移动到当前行的开始GG光标移动到最后一行gg光标移动到第一行在命令行模式下删除与复制的操作键组合(命令)含义dd删</div>
                    </li>
                    <li><a href="/article/1773347164047605760.htm"
                           title="自学黑客(网络安全)技术——2024最新" target="_blank">自学黑客(网络安全)技术——2024最新</a>
                        <span class="text-muted">九九归二</span>
<a class="tag" taget="_blank" href="/search/web%E5%AE%89%E5%85%A8/1.htm">web安全</a><a class="tag" taget="_blank" href="/search/%E5%AE%89%E5%85%A8/1.htm">安全</a><a class="tag" taget="_blank" href="/search/%E5%AD%A6%E4%B9%A0/1.htm">学习</a><a class="tag" taget="_blank" href="/search/%E7%AC%94%E8%AE%B0/1.htm">笔记</a><a class="tag" taget="_blank" href="/search/%E7%BD%91%E7%BB%9C/1.htm">网络</a><a class="tag" taget="_blank" href="/search/%E7%BD%91%E7%BB%9C%E5%AE%89%E5%85%A8/1.htm">网络安全</a><a class="tag" taget="_blank" href="/search/%E4%BF%A1%E6%81%AF%E5%AE%89%E5%85%A8/1.htm">信息安全</a>
                        <div>01什么是网络安全网络安全可以基于攻击和防御视角来分类,我们经常听到的“红队”、“渗透测试”等就是研究攻击技术,而“蓝队”、“安全运营”、“安全运维”则研究防御技术。无论网络、Web、移动、桌面、云等哪个领域,都有攻与防两面性,例如Web安全技术,既有Web渗透,也有Web防御技术(WAF)。作为一个合格的网络安全工程师,应该做到攻守兼备,毕竟知己知彼,才能百战百胜。02怎样规划网络安全如果你是一</div>
                    </li>
                    <li><a href="/article/1773337745800888320.htm"
                           title="Azkaban各种类型的Job编写" target="_blank">Azkaban各种类型的Job编写</a>
                        <span class="text-muted">__元昊__</span>

                        <div>一、概述原生的Azkaban支持的plugin类型有以下这些:command:Linuxshell命令行任务gobblin:通用数据采集工具hadoopJava:运行hadoopMR任务java:原生java任务hive:支持执行hiveSQLpig:pig脚本任务spark:spark任务hdfsToTeradata:把数据从hdfs导入TeradatateradataToHdfs:把数据从Te</div>
                    </li>
                    <li><a href="/article/1773302984202059776.htm"
                           title="Linux初学(十)shell脚本" target="_blank">Linux初学(十)shell脚本</a>
                        <span class="text-muted">王依硕</span>
<a class="tag" taget="_blank" href="/search/Linux/1.htm">Linux</a><a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a><a class="tag" taget="_blank" href="/search/%E8%BF%90%E7%BB%B4/1.htm">运维</a><a class="tag" taget="_blank" href="/search/%E6%9C%8D%E5%8A%A1%E5%99%A8/1.htm">服务器</a>
                        <div>一、for循环1.1循环的格式for变量in列表do代码代码....done循环的逻辑:将列表中的每个元素逐一赋值给变量每赋值一次,do和done之间的代码就会执行一次1.2列表的生成方式方法1:直接给出列表元素【用空格分隔多个元素】133129hahabaidu方法2:用通配符来生成元素/home/a*方法3:用命令来生成元素ls/etc/方法4:用{}展开的形式生成元素{3..7}{a..e}</div>
                    </li>
                    <li><a href="/article/1773259809336918016.htm"
                           title="Ubuntu下安装Chrome浏览器(简单,使用)" target="_blank">Ubuntu下安装Chrome浏览器(简单,使用)</a>
                        <span class="text-muted">Starry-sky(jing)</span>
<a class="tag" taget="_blank" href="/search/%5Blinux%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F%E7%AC%94%E8%AE%B0%5D/1.htm">[linux操作系统笔记]</a><a class="tag" taget="_blank" href="/search/chrome/1.htm">chrome</a><a class="tag" taget="_blank" href="/search/%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0/1.htm">深度学习</a><a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a>
                        <div>下载安装GoogleChrome浏览器deb包极速下载:下载链接32位wgethttps://dl.google.com/linux/direct/google-chrome-stable_current_i386.deb64位wgethttps://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb安装sudodpk</div>
                    </li>
                    <li><a href="/article/1773237782928490496.htm"
                           title="【Linux】PyCharm无法启动报错及解决方法" target="_blank">【Linux】PyCharm无法启动报错及解决方法</a>
                        <span class="text-muted">不是AI</span>
<a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/%E8%BD%AF%E4%BB%B6%E6%93%8D%E4%BD%9C/1.htm">软件操作</a><a class="tag" taget="_blank" href="/search/Linux/1.htm">Linux</a><a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a><a class="tag" taget="_blank" href="/search/pycharm/1.htm">pycharm</a><a class="tag" taget="_blank" href="/search/%E8%BF%90%E7%BB%B4/1.htm">运维</a>
                        <div>一、问题描述如图,笔者试图在Ubuntu18.04虚拟机上运行PyCharm开发工具(已安装,安装过程可以参考我的博客Ubuntu安装PyCharm),无法启动,报错:CannotconnecttoalreadyrunningIDEinstance.Exception:Process2574isstillrunning.报错截图如下:二、解决方法通过报错信息看出,出于某种原因,进程(PID为257</div>
                    </li>
                    <li><a href="/article/1773211849400057856.htm"
                           title="Linux(centos7)部署hive" target="_blank">Linux(centos7)部署hive</a>
                        <span class="text-muted">灯下夜无眠</span>
<a class="tag" taget="_blank" href="/search/Linux/1.htm">Linux</a><a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a><a class="tag" taget="_blank" href="/search/hive/1.htm">hive</a><a class="tag" taget="_blank" href="/search/%E8%BF%90%E7%BB%B4/1.htm">运维</a><a class="tag" taget="_blank" href="/search/dbeaver/1.htm">dbeaver</a><a class="tag" taget="_blank" href="/search/hive%E5%AE%A2%E6%88%B7%E7%AB%AF/1.htm">hive客户端</a>
                        <div>前提环境:已部署完hadoop(HDFS、MapReduce、YARN)1、安装元数据服务MySQL切换root用户#更新密钥rpm--importhttps://repo.mysql.com/RPM-GPG-KEY-mysqL-2022#安装Mysqlyum库rpm-Uvhhttp://repo.mysql.com//mysql57-community-release-el7-7.noarch.</div>
                    </li>
                    <li><a href="/article/1773208954436911104.htm"
                           title="Linux通过Tuned实现动态调优系统性能" target="_blank">Linux通过Tuned实现动态调优系统性能</a>
                        <span class="text-muted">星河_赵梓宇</span>
<a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a><a class="tag" taget="_blank" href="/search/%E8%BF%90%E7%BB%B4/1.htm">运维</a><a class="tag" taget="_blank" href="/search/%E6%9C%8D%E5%8A%A1%E5%99%A8/1.htm">服务器</a>
                        <div>Linux通过Tuned实现动态调优系统性能Tuned简介对于普通用户来说,优化Linux应用环境可能是相当具有挑战性的。它涵盖了各种领域,并且有许多参数需要考虑,比如CPU、存储、缓存策略和内存管理。尽管Linux有默认设置可以处理大多数情况和场景,但是对于高性能、高并发和高可用性系统等特殊场景,需要进行调整。本文讨论的特性是tuned,它是Linux系统中常用的一种调优服务。tuned由两个程</div>
                    </li>
                    <li><a href="/article/1772775523957669888.htm"
                           title="centos7 安装influxdb+telegraf+grafana 监控服务器" target="_blank">centos7 安装influxdb+telegraf+grafana 监控服务器</a>
                        <span class="text-muted">吕吕-lvlv</span>
<a class="tag" taget="_blank" href="/search/grafana/1.htm">grafana</a><a class="tag" taget="_blank" href="/search/%E6%9C%8D%E5%8A%A1%E5%99%A8/1.htm">服务器</a><a class="tag" taget="_blank" href="/search/%E8%BF%90%E7%BB%B4/1.htm">运维</a>
                        <div>influxdbinfluxdb是一个时间序列数据库,所有数据记录都会打上时间戳,适合存储数字类型的内容telegraftelegraf可以用于收集系统和服务的统计数据并发送到influxdbgrafanagrafana是一个界面非常漂亮,可直接读取influxdb数据展示成各种图表的开源可视化web软件安装并启动influxdb数据库vim/etc/yum.repos.d/influxdb.re</div>
                    </li>
                    <li><a href="/article/1772698992447127552.htm"
                           title="vscode配置go远程linux" target="_blank">vscode配置go远程linux</a>
                        <span class="text-muted">gdut17</span>
<a class="tag" taget="_blank" href="/search/golang/1.htm">golang</a>
                        <div>Toolsenvironment:GOPATH=/root/goInstalling9toolsat/root/go/bininmodulemode.gopkgsgo-outlinegotestsgomodifytagsimplgoplaydlvgolintgoplsInstallinggithub.com/uudashr/gopkgs/v2/cmd/gopkgs(/root/go/bin/gop</div>
                    </li>
                    <li><a href="/article/1772696508341223424.htm"
                           title="CentOS7使用firewalld打开关闭防火墙与端口" target="_blank">CentOS7使用firewalld打开关闭防火墙与端口</a>
                        <span class="text-muted">gurlan</span>

                        <div>1、firewalld的基本使用启动:systemctlstartfirewalld关闭:systemctlstopfirewalld查看状态:systemctlstatusfirewalld开机禁用:systemctldisablefirewalld开机启用:systemctlenablefirewalld2.systemctl是CentOS7的服务管理工具中主要的工具,它融合之前service</div>
                    </li>
                    <li><a href="/article/1772663871715213312.htm"
                           title="centos7中的MySQL安装" target="_blank">centos7中的MySQL安装</a>
                        <span class="text-muted">老伙子53</span>
<a class="tag" taget="_blank" href="/search/mysql/1.htm">mysql</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E5%BA%93/1.htm">数据库</a>
                        <div>centos7中的MySQL安装一、MySQL5.7.17安装脚本#!/bin/bashcd/rootmkdirmysql_tarwgethttps://downloads.mysql.com/archives/get/p/23/file/mysql-community-server-5.7.17-1.el7.x86_64.rpmwgethttps://downloads.mysql.com/ar</div>
                    </li>
                    <li><a href="/article/1772649898592763904.htm"
                           title="部署es集群" target="_blank">部署es集群</a>
                        <span class="text-muted">liushaojiax</span>
<a class="tag" taget="_blank" href="/search/elasticsearch/1.htm">elasticsearch</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E5%A4%A7%E6%95%B0%E6%8D%AE/1.htm">大数据</a>
                        <div>我们会在单机上利用docker容器运行多个es实例来模拟es集群。不过生产环境推荐大家每一台服务节点仅部署一个es的实例。部署es集群可以直接使用docker-compose来完成,但这要求你的Linux虚拟机至少有4G的内存空间创建es集群首先编写一个docker-compose文件,内容如下:version:'2.2'services:es01:image:elasticsearch:7.12</div>
                    </li>
                    <li><a href="/article/1772639322672005120.htm"
                           title="网络安全(黑客技术)—自学" target="_blank">网络安全(黑客技术)—自学</a>
                        <span class="text-muted">德西德西</span>
<a class="tag" taget="_blank" href="/search/web%E5%AE%89%E5%85%A8/1.htm">web安全</a><a class="tag" taget="_blank" href="/search/%E5%AE%89%E5%85%A8/1.htm">安全</a><a class="tag" taget="_blank" href="/search/%E7%BD%91%E7%BB%9C%E5%AE%89%E5%85%A8/1.htm">网络安全</a><a class="tag" taget="_blank" href="/search/%E5%AD%A6%E4%B9%A0/1.htm">学习</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a><a class="tag" taget="_blank" href="/search/php/1.htm">php</a>
                        <div>1.网络安全是什么网络安全可以基于攻击和防御视角来分类,我们经常听到的“红队”、“渗透测试”等就是研究攻击技术,而“蓝队”、“安全运营”、“安全运维”则研究防御技术。2.网络安全市场一、是市场需求量高;二、则是发展相对成熟入门比较容易。3.所需要的技术水平需要掌握的知识点偏多(举例):4.国家政策环境对于国家与企业的地位愈发重要,没有网络安全就没有国家安全更有为国效力的正义黑客—红客联盟可见其重视</div>
                    </li>
                    <li><a href="/article/1772615278241316864.htm"
                           title="智慧公厕的先进技术应用" target="_blank">智慧公厕的先进技术应用</a>
                        <span class="text-muted">中期科技ZONTREE</span>
<a class="tag" taget="_blank" href="/search/%E6%99%BA%E6%85%A7%E5%8E%95%E6%89%80/1.htm">智慧厕所</a><a class="tag" taget="_blank" href="/search/%E6%99%BA%E6%85%A7%E5%85%AC%E5%8E%95/1.htm">智慧公厕</a><a class="tag" taget="_blank" href="/search/%E6%99%BA%E6%85%A7%E5%9F%8E%E5%B8%82/1.htm">智慧城市</a>
                        <div>公共厕所一直以来都是城市管理中一个重要的工作,但设施老化、环境脏乱、服务质量低下等问题一直困扰着城市居民。然而,随着科技的进步和数字技术的应用,智慧公厕的建设正在改变这一现状。智慧公厕通过对所在辖区内所有公共厕所的全域感知、全网协同、全业务融合和全场景智慧的赋能,“千厕一云”的公共厕所云管理模式应运而生。智慧公厕的云端多屏管理,将各个公厕连接在一起,实现信息的共享和管理的集中化。通过大数据、云计算</div>
                    </li>
                    <li><a href="/article/1772602312632631296.htm"
                           title="Elasticsearch8 - Docker安装Elasticsearch8.12.2" target="_blank">Elasticsearch8 - Docker安装Elasticsearch8.12.2</a>
                        <span class="text-muted">王谷雨_</span>
<a class="tag" taget="_blank" href="/search/ElasticSearch/1.htm">ElasticSearch</a><a class="tag" taget="_blank" href="/search/elasticsearch/1.htm">elasticsearch</a><a class="tag" taget="_blank" href="/search/docker/1.htm">docker</a>
                        <div>前言最近在学习ES,所以需要在服务器上装一个单节点的ES服务器环境:centos7.9安装下载镜像目前最新版本是8.12.2dockerpulldocker.elastic.co/elasticsearch/elasticsearch:8.12.2创建配置新增配置文件elasticsearch.ymlhttp.host:0.0.0.0http.cors.enabled:truehttp.cors.</div>
                    </li>
                    <li><a href="/article/1772550330626670592.htm"
                           title="SQL运维_Unix下MySQL-8.0.18配置文件示例" target="_blank">SQL运维_Unix下MySQL-8.0.18配置文件示例</a>
                        <span class="text-muted">Mostcow</span>
<a class="tag" taget="_blank" href="/search/SQL/1.htm">SQL</a><a class="tag" taget="_blank" href="/search/sql/1.htm">sql</a><a class="tag" taget="_blank" href="/search/%E8%BF%90%E7%BB%B4/1.htm">运维</a><a class="tag" taget="_blank" href="/search/unix/1.htm">unix</a>
                        <div>SQL运维_Unix下MySQL-8.0.18配置文件示例MySQL是一个关系型数据库管理系统,由瑞典MySQLAB公司开发,属于Oracle旗下产品。MySQL是最流行的关系型数据库管理系统之一,在WEB应用方面,MySQL是最好的RDBMS(RelationalDatabaseManagementSystem,关系数据库管理系统)应用软件之一。MySQL是一种关系型数据库管理系统,关系数据库将</div>
                    </li>
                    <li><a href="/article/1772548316064710656.htm"
                           title="在 Linux/Ubuntu/Debian 上安装 SQL Server 2019" target="_blank">在 Linux/Ubuntu/Debian 上安装 SQL Server 2019</a>
                        <span class="text-muted">理工男老K</span>
<a class="tag" taget="_blank" href="/search/ubuntu/1.htm">ubuntu</a><a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a><a class="tag" taget="_blank" href="/search/%E8%BF%90%E7%BB%B4/1.htm">运维</a><a class="tag" taget="_blank" href="/search/debian/1.htm">debian</a><a class="tag" taget="_blank" href="/search/sqlserver/1.htm">sqlserver</a>
                        <div>Microsoft为Linux发行版(包括Ubuntu)提供SQLServer。以下是有关如何执行此操作的基本指南:注册MicrosoftUbuntu存储库并添加公共存储库GPG密钥:sudowget-qO-https://packages.microsoft.com/keys/microsoft.asc|sudoapt-keyadd-sudoadd-apt-repository"$(wget-q</div>
                    </li>
                                <li><a href="/article/51.htm"
                                       title="mondb入手" target="_blank">mondb入手</a>
                                    <span class="text-muted">木zi_鸣</span>
<a class="tag" taget="_blank" href="/search/mongodb/1.htm">mongodb</a>
                                    <div>windows 启动mongodb  编写bat文件, 
 
mongod --dbpath D:\software\MongoDBDATA 
mongod --help  查询各种配置 
配置在mongob 
 
打开批处理,即可启动,27017原生端口,shell操作监控端口  扩展28017,web端操作端口 
 
启动配置文件配置, 
 
数据更灵活 </div>
                                </li>
                                <li><a href="/article/178.htm"
                                       title="大型高并发高负载网站的系统架构" target="_blank">大型高并发高负载网站的系统架构</a>
                                    <span class="text-muted">bijian1013</span>
<a class="tag" taget="_blank" href="/search/%E9%AB%98%E5%B9%B6%E5%8F%91/1.htm">高并发</a><a class="tag" taget="_blank" href="/search/%E8%B4%9F%E8%BD%BD%E5%9D%87%E8%A1%A1/1.htm">负载均衡</a>
                                    <div>        扩展Web应用程序 
一.概念 
        简单的来说,如果一个系统可扩展,那么你可以通过扩展来提供系统的性能。这代表着系统能够容纳更高的负载、更大的数据集,并且系统是可维护的。扩展和语言、某项具体的技术都是无关的。扩展可以分为两种: 
        1.</div>
                                </li>
                                <li><a href="/article/305.htm"
                                       title="DISPLAY变量和xhost(原创)" target="_blank">DISPLAY变量和xhost(原创)</a>
                                    <span class="text-muted">czmmiao</span>
<a class="tag" taget="_blank" href="/search/display/1.htm">display</a>
                                    <div>DISPLAY 
在Linux/Unix类操作系统上, DISPLAY用来设置将图形显示到何处. 直接登陆图形界面或者登陆命令行界面后使用startx启动图形, DISPLAY环境变量将自动设置为:0:0, 此时可以打开终端, 输出图形程序的名称(比如xclock)来启动程序, 图形将显示在本地窗口上, 在终端上输入printenv查看当前环境变量, 输出结果中有如下内容:DISPLAY=:0.0</div>
                                </li>
                                <li><a href="/article/432.htm"
                                       title="获取B/S客户端IP" target="_blank">获取B/S客户端IP</a>
                                    <span class="text-muted">周凡杨</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E7%BC%96%E7%A8%8B/1.htm">编程</a><a class="tag" taget="_blank" href="/search/jsp/1.htm">jsp</a><a class="tag" taget="_blank" href="/search/Web/1.htm">Web</a><a class="tag" taget="_blank" href="/search/%E6%B5%8F%E8%A7%88%E5%99%A8/1.htm">浏览器</a>
                                    <div>   最近想写个B/S架构的聊天系统,因为以前做过C/S架构的QQ聊天系统,所以对于Socket通信编程只是一个巩固。对于C/S架构的聊天系统,由于存在客户端Java应用,所以直接在代码中获取客户端的IP,应用的方法为: 
   String ip = InetAddress.getLocalHost().getHostAddress(); 
然而对于WEB</div>
                                </li>
                                <li><a href="/article/559.htm"
                                       title="浅谈类和对象" target="_blank">浅谈类和对象</a>
                                    <span class="text-muted">朱辉辉33</span>
<a class="tag" taget="_blank" href="/search/%E7%BC%96%E7%A8%8B/1.htm">编程</a>
                                    <div>    类是对一类事物的总称,对象是描述一个物体的特征,类是对象的抽象。简单来说,类是抽象的,不占用内存,对象是具体的, 
占用存储空间。 
    类是由属性和方法构成的,基本格式是public  class 类名{ 
 
 //定义属性 
 private/public 数据类型 属性名; 
 
 //定义方法 
 publ</div>
                                </li>
                                <li><a href="/article/686.htm"
                                       title="android activity与viewpager+fragment的生命周期问题" target="_blank">android activity与viewpager+fragment的生命周期问题</a>
                                    <span class="text-muted">肆无忌惮_</span>
<a class="tag" taget="_blank" href="/search/viewpager/1.htm">viewpager</a>
                                    <div>有一个Activity里面是ViewPager,ViewPager里面放了两个Fragment。 
第一次进入这个Activity。开启了服务,并在onResume方法中绑定服务后,对Service进行了一定的初始化,其中调用了Fragment中的一个属性。 
		super.onResume();
		bindService(intent, conn, BIND_AUTO_CREATE);
</div>
                                </li>
                                <li><a href="/article/813.htm"
                                       title="base64Encode对图片进行编码" target="_blank">base64Encode对图片进行编码</a>
                                    <span class="text-muted">843977358</span>
<a class="tag" taget="_blank" href="/search/base64/1.htm">base64</a><a class="tag" taget="_blank" href="/search/%E5%9B%BE%E7%89%87/1.htm">图片</a><a class="tag" taget="_blank" href="/search/encoder/1.htm">encoder</a>
                                    <div>/**
	 * 对图片进行base64encoder编码
	 * 
	 * @author mrZhang
	 * @param path
	 * @return
	 */
	public static String encodeImage(String path) {
		BASE64Encoder encoder = null;
		byte[] b = null;
		I</div>
                                </li>
                                <li><a href="/article/940.htm"
                                       title="Request Header简介" target="_blank">Request Header简介</a>
                                    <span class="text-muted">aigo</span>
<a class="tag" taget="_blank" href="/search/servlet/1.htm">servlet</a>
                                    <div>当一个客户端(通常是浏览器)向Web服务器发送一个请求是,它要发送一个请求的命令行,一般是GET或POST命令,当发送POST命令时,它还必须向服务器发送一个叫“Content-Length”的请求头(Request   Header)   用以指明请求数据的长度,除了Content-Length之外,它还可以向服务器发送其它一些Headers,如:    </div>
                                </li>
                                <li><a href="/article/1067.htm"
                                       title="HttpClient4.3 创建SSL协议的HttpClient对象" target="_blank">HttpClient4.3 创建SSL协议的HttpClient对象</a>
                                    <span class="text-muted">alleni123</span>
<a class="tag" taget="_blank" href="/search/httpclient/1.htm">httpclient</a><a class="tag" taget="_blank" href="/search/%E7%88%AC%E8%99%AB/1.htm">爬虫</a><a class="tag" taget="_blank" href="/search/ssl/1.htm">ssl</a>
                                    <div>public class HttpClientUtils
{
	public static CloseableHttpClient createSSLClientDefault(CookieStore cookies){
		SSLContext sslContext=null;
		
		try
		{
			sslContext=new SSLContextBuilder().l</div>
                                </li>
                                <li><a href="/article/1194.htm"
                                       title="java取反 -右移-左移-无符号右移的探讨" target="_blank">java取反 -右移-左移-无符号右移的探讨</a>
                                    <span class="text-muted">百合不是茶</span>
<a class="tag" taget="_blank" href="/search/%E4%BD%8D%E8%BF%90%E7%AE%97%E7%AC%A6+%E4%BD%8D%E7%A7%BB/1.htm">位运算符 位移</a>
                                    <div>取反:
		在二进制中第一位,1表示符数,0表示正数
		byte a = -1;
		原码:10000001
		反码:11111110
		补码:11111111
      //异或: 00000000
		byte b = -2;
		原码:10000010
		反码:11111101
		补码:11111110
      //异或: 00000001
		
	</div>
                                </li>
                                <li><a href="/article/1321.htm"
                                       title="java多线程join的作用与用法" target="_blank">java多线程join的作用与用法</a>
                                    <span class="text-muted">bijian1013</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E5%A4%9A%E7%BA%BF%E7%A8%8B/1.htm">多线程</a>
                                    <div>        对于JAVA的join,JDK 是这样说的:join public final void join (long millis )throws InterruptedException Waits at most millis milliseconds for this thread to die. A timeout of 0 means t</div>
                                </li>
                                <li><a href="/article/1448.htm"
                                       title="Java发送http请求(get 与post方法请求)" target="_blank">Java发送http请求(get 与post方法请求)</a>
                                    <span class="text-muted">bijian1013</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/spring/1.htm">spring</a>
                                    <div>PostRequest.java 
package com.bijian.study;

import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.HttpURL</div>
                                </li>
                                <li><a href="/article/1575.htm"
                                       title="【Struts2二】struts.xml中package下的action配置项默认值" target="_blank">【Struts2二】struts.xml中package下的action配置项默认值</a>
                                    <span class="text-muted">bit1129</span>
<a class="tag" taget="_blank" href="/search/struts.xml/1.htm">struts.xml</a>
                                    <div>在第一部份,定义了struts.xml文件,如下所示: 
  
<!DOCTYPE struts PUBLIC
        "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
        "http://struts.apache.org/dtds/struts</div>
                                </li>
                                <li><a href="/article/1702.htm"
                                       title="【Kafka十三】Kafka Simple Consumer" target="_blank">【Kafka十三】Kafka Simple Consumer</a>
                                    <span class="text-muted">bit1129</span>
<a class="tag" taget="_blank" href="/search/simple/1.htm">simple</a>
                                    <div>代码中关于Host和Port是割裂开的,这会导致单机环境下的伪分布式Kafka集群环境下,这个例子没法运行。 
实际情况是需要将host和port绑定到一起, 
  
package kafka.examples.lowlevel;

import kafka.api.FetchRequest;
import kafka.api.FetchRequestBuilder;
impo</div>
                                </li>
                                <li><a href="/article/1829.htm"
                                       title="nodejs学习api" target="_blank">nodejs学习api</a>
                                    <span class="text-muted">ronin47</span>
<a class="tag" taget="_blank" href="/search/nodejs+api/1.htm">nodejs api</a>
                                    <div>NodeJS基础 什么是NodeJS 
JS是脚本语言,脚本语言都需要一个解析器才能运行。对于写在HTML页面里的JS,浏览器充当了解析器的角色。而对于需要独立运行的JS,NodeJS就是一个解析器。 
每一种解析器都是一个运行环境,不但允许JS定义各种数据结构,进行各种计算,还允许JS使用运行环境提供的内置对象和方法做一些事情。例如运行在浏览器中的JS的用途是操作DOM,浏览器就提供了docum</div>
                                </li>
                                <li><a href="/article/1956.htm"
                                       title="java-64.寻找第N个丑数" target="_blank">java-64.寻找第N个丑数</a>
                                    <span class="text-muted">bylijinnan</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a>
                                    <div>


public class UglyNumber {

	/**
	 * 64.查找第N个丑数
具体思路可参考 [url] http://zhedahht.blog.163.com/blog/static/2541117420094245366965/[/url]
	 * 
题目:我们把只包含因子
2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14</div>
                                </li>
                                <li><a href="/article/2083.htm"
                                       title="二维数组(矩阵)对角线输出" target="_blank">二维数组(矩阵)对角线输出</a>
                                    <span class="text-muted">bylijinnan</span>
<a class="tag" taget="_blank" href="/search/%E4%BA%8C%E7%BB%B4%E6%95%B0%E7%BB%84/1.htm">二维数组</a>
                                    <div>

/**
二维数组 对角线输出 两个方向
例如对于数组:
{ 1, 2, 3, 4 }, 
{ 5, 6, 7, 8 },
{ 9, 10, 11, 12 }, 
{ 13, 14, 15, 16 },

slash方向输出:
1 
5 2 
9 6 3 
13 10 7 4 
14 11 8 
15 12 
16 

backslash输出:
4 
3</div>
                                </li>
                                <li><a href="/article/2210.htm"
                                       title="[JWFD开源工作流设计]工作流跳跃模式开发关键点(今日更新)" target="_blank">[JWFD开源工作流设计]工作流跳跃模式开发关键点(今日更新)</a>
                                    <span class="text-muted">comsci</span>
<a class="tag" taget="_blank" href="/search/%E5%B7%A5%E4%BD%9C%E6%B5%81/1.htm">工作流</a>
                                    <div>   既然是做开源软件的,我们的宗旨就是给大家分享设计和代码,那么现在我就用很简单扼要的语言来透露这个跳跃模式的设计原理 
 
   大家如果用过JWFD的ARC-自动运行控制器,或者看过代码,应该知道在ARC算法模块中有一个函数叫做SAN(),这个函数就是ARC的核心控制器,要实现跳跃模式,在SAN函数中一定要对LN链表数据结构进行操作,首先写一段代码,把</div>
                                </li>
                                <li><a href="/article/2337.htm"
                                       title="redis常见使用" target="_blank">redis常见使用</a>
                                    <span class="text-muted">cuityang</span>
<a class="tag" taget="_blank" href="/search/redis/1.htm">redis</a><a class="tag" taget="_blank" href="/search/%E5%B8%B8%E8%A7%81%E4%BD%BF%E7%94%A8/1.htm">常见使用</a>
                                    <div>redis 通常被认为是一个数据结构服务器,主要是因为其有着丰富的数据结构 strings、map、 list、sets、 sorted sets 
 
引入jar包 jedis-2.1.0.jar  (本文下方提供下载) 
 
package redistest; 
 
import redis.clients.jedis.Jedis; 
 
public class Listtest</div>
                                </li>
                                <li><a href="/article/2464.htm"
                                       title="配置多个redis" target="_blank">配置多个redis</a>
                                    <span class="text-muted">dalan_123</span>
<a class="tag" taget="_blank" href="/search/redis/1.htm">redis</a>
                                    <div>配置多个redis客户端 
<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans"       xmlns:xsi=&quo</div>
                                </li>
                                <li><a href="/article/2591.htm"
                                       title="attrib命令" target="_blank">attrib命令</a>
                                    <span class="text-muted">dcj3sjt126com</span>
<a class="tag" taget="_blank" href="/search/attr/1.htm">attr</a>
                                    <div>     
attrib指令用于修改文件的属性.文件的常见属性有:只读.存档.隐藏和系统.      
  只读属性是指文件只可以做读的操作.不能对文件进行写的操作.就是文件的写保护.  
 
  存档属性是用来标记文件改动的.即在上一次备份后文件有所改动.一些备份软件在备份的时候会只去备份带有存档属性的文件.  
 </div>
                                </li>
                                <li><a href="/article/2718.htm"
                                       title="Yii使用公共函数" target="_blank">Yii使用公共函数</a>
                                    <span class="text-muted">dcj3sjt126com</span>
<a class="tag" taget="_blank" href="/search/yii/1.htm">yii</a>
                                    <div>在网站项目中,没必要把公用的函数写成一个工具类,有时候面向过程其实更方便。   在入口文件index.php里添加   require_once('protected/function.php');   即可对其引用,成为公用的函数集合。   function.php如下:   
   <?php   /**     * This is the shortcut to D</div>
                                </li>
                                <li><a href="/article/2845.htm"
                                       title="linux 系统资源的查看(free、uname、uptime、netstat)" target="_blank">linux 系统资源的查看(free、uname、uptime、netstat)</a>
                                    <span class="text-muted">eksliang</span>
<a class="tag" taget="_blank" href="/search/netstat/1.htm">netstat</a><a class="tag" taget="_blank" href="/search/linux+uname/1.htm">linux uname</a><a class="tag" taget="_blank" href="/search/linux+uptime/1.htm">linux uptime</a><a class="tag" taget="_blank" href="/search/linux+free/1.htm">linux free</a>
                                    <div>linux 系统资源的查看 
转载请出自出处:http://eksliang.iteye.com/blog/2167081 
  
http://eksliang.iteye.com 一、free查看内存的使用情况 
语法如下: 
  
free [-b][-k][-m][-g] [-t]
参数含义
-b:直接输入free时,显示的单位是kb我们可以使用b(bytes),m</div>
                                </li>
                                <li><a href="/article/2972.htm"
                                       title="JAVA的位操作符" target="_blank">JAVA的位操作符</a>
                                    <span class="text-muted">greemranqq</span>
<a class="tag" taget="_blank" href="/search/%E4%BD%8D%E8%BF%90%E7%AE%97/1.htm">位运算</a><a class="tag" taget="_blank" href="/search/JAVA%E4%BD%8D%E7%A7%BB/1.htm">JAVA位移</a><a class="tag" taget="_blank" href="/search/%3C%3C/1.htm"><<</a><a class="tag" taget="_blank" href="/search/%3E%3E%3E/1.htm">>>></a>
                                    <div>最近几种进制,加上各种位操作符,发现都比较模糊,不能完全掌握,这里就再熟悉熟悉。 
  
1.按位操作符 : 
   按位操作符是用来操作基本数据类型中的单个bit,即二进制位,会对两个参数执行布尔代数运算,获得结果。 
   与(&)运算: 
   1&1 = 1, 1&0 = 0, 0&0 &</div>
                                </li>
                                <li><a href="/article/3099.htm"
                                       title="Web前段学习网站" target="_blank">Web前段学习网站</a>
                                    <span class="text-muted">ihuning</span>
<a class="tag" taget="_blank" href="/search/Web/1.htm">Web</a>
                                    <div>  
Web前段学习网站 
菜鸟学习:http://www.w3cschool.cc/ 
  
JQuery中文网:http://www.jquerycn.cn/ 
  
内存溢出:http://outofmemory.cn/#csdn.blog 
  
http://www.icoolxue.com/ 
  
http://www.jikexue</div>
                                </li>
                                <li><a href="/article/3226.htm"
                                       title="强强联合:FluxBB 作者加盟 Flarum" target="_blank">强强联合:FluxBB 作者加盟 Flarum</a>
                                    <span class="text-muted">justjavac</span>
<a class="tag" taget="_blank" href="/search/r/1.htm">r</a>
                                    <div>原文:FluxBB Joins Forces With Flarum作者:Toby Zerner译文:强强联合:FluxBB 作者加盟 Flarum译者:justjavac  
FluxBB 是一个快速、轻量级论坛软件,它的开发者是一名德国的 PHP 天才 Franz Liedke。FluxBB 的下一个版本(2.0)将被完全重写,并已经开发了一段时间。FluxBB 看起来非常有前途的,</div>
                                </li>
                                <li><a href="/article/3353.htm"
                                       title="java统计在线人数(session存储信息的)" target="_blank">java统计在线人数(session存储信息的)</a>
                                    <span class="text-muted">macroli</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/Web/1.htm">Web</a>
                                    <div>这篇日志是我写的第三次了 前两次都发布失败!郁闷极了! 
  
由于在web开发中常常用到这一部分所以在此记录一下,呵呵,就到备忘录了! 
我对于登录信息时使用session存储的,所以我这里是通过实现HttpSessionAttributeListener这个接口完成的。 
1、实现接口类,在web.xml文件中配置监听类,从而可以使该类完成其工作。 
public class Ses</div>
                                </li>
                                <li><a href="/article/3480.htm"
                                       title="bootstrp carousel初体验 快速构建图片播放" target="_blank">bootstrp carousel初体验 快速构建图片播放</a>
                                    <span class="text-muted">qiaolevip</span>
<a class="tag" taget="_blank" href="/search/%E6%AF%8F%E5%A4%A9%E8%BF%9B%E6%AD%A5%E4%B8%80%E7%82%B9%E7%82%B9/1.htm">每天进步一点点</a><a class="tag" taget="_blank" href="/search/%E5%AD%A6%E4%B9%A0%E6%B0%B8%E6%97%A0%E6%AD%A2%E5%A2%83/1.htm">学习永无止境</a><a class="tag" taget="_blank" href="/search/bootstrap/1.htm">bootstrap</a><a class="tag" taget="_blank" href="/search/%E7%BA%B5%E8%A7%82%E5%8D%83%E8%B1%A1/1.htm">纵观千象</a>
                                    <div>img{
			border: 1px solid white;
			box-shadow: 2px 2px 12px #333;
			_width: expression(this.width > 600 ? "600px" : this.width + "px");
			_height: expression(this.width &</div>
                                </li>
                                <li><a href="/article/3607.htm"
                                       title="SparkSQL读取HBase数据,通过自定义外部数据源" target="_blank">SparkSQL读取HBase数据,通过自定义外部数据源</a>
                                    <span class="text-muted">superlxw1234</span>
<a class="tag" taget="_blank" href="/search/spark/1.htm">spark</a><a class="tag" taget="_blank" href="/search/sparksql/1.htm">sparksql</a><a class="tag" taget="_blank" href="/search/sparksql%E8%AF%BB%E5%8F%96hbase/1.htm">sparksql读取hbase</a><a class="tag" taget="_blank" href="/search/sparksql%E5%A4%96%E9%83%A8%E6%95%B0%E6%8D%AE%E6%BA%90/1.htm">sparksql外部数据源</a>
                                    <div>关键字:SparkSQL读取HBase、SparkSQL自定义外部数据源 
  
  
前面文章介绍了SparSQL通过Hive操作HBase表。 
  
SparkSQL从1.2开始支持自定义外部数据源(External DataSource),这样就可以通过API接口来实现自己的外部数据源。这里基于Spark1.4.0,简单介绍SparkSQL自定义外部数据源,访</div>
                                </li>
                                <li><a href="/article/3734.htm"
                                       title="Spring Boot 1.3.0.M1发布" target="_blank">Spring Boot 1.3.0.M1发布</a>
                                    <span class="text-muted">wiselyman</span>
<a class="tag" taget="_blank" href="/search/spring+boot/1.htm">spring boot</a>
                                    <div>    Spring Boot 1.3.0.M1于6.12日发布,现在可以从Spring milestone repository下载。这个版本是基于Spring Framework 4.2.0.RC1,并在Spring Boot 1.2之上提供了大量的新特性improvements and new features。主要包含以下: 
  
1.提供一个新的sprin</div>
                                </li>
                </ul>
            </div>
        </div>
    </div>

<div>
    <div class="container">
        <div class="indexes">
            <strong>按字母分类:</strong>
            <a href="/tags/A/1.htm" target="_blank">A</a><a href="/tags/B/1.htm" target="_blank">B</a><a href="/tags/C/1.htm" target="_blank">C</a><a
                href="/tags/D/1.htm" target="_blank">D</a><a href="/tags/E/1.htm" target="_blank">E</a><a href="/tags/F/1.htm" target="_blank">F</a><a
                href="/tags/G/1.htm" target="_blank">G</a><a href="/tags/H/1.htm" target="_blank">H</a><a href="/tags/I/1.htm" target="_blank">I</a><a
                href="/tags/J/1.htm" target="_blank">J</a><a href="/tags/K/1.htm" target="_blank">K</a><a href="/tags/L/1.htm" target="_blank">L</a><a
                href="/tags/M/1.htm" target="_blank">M</a><a href="/tags/N/1.htm" target="_blank">N</a><a href="/tags/O/1.htm" target="_blank">O</a><a
                href="/tags/P/1.htm" target="_blank">P</a><a href="/tags/Q/1.htm" target="_blank">Q</a><a href="/tags/R/1.htm" target="_blank">R</a><a
                href="/tags/S/1.htm" target="_blank">S</a><a href="/tags/T/1.htm" target="_blank">T</a><a href="/tags/U/1.htm" target="_blank">U</a><a
                href="/tags/V/1.htm" target="_blank">V</a><a href="/tags/W/1.htm" target="_blank">W</a><a href="/tags/X/1.htm" target="_blank">X</a><a
                href="/tags/Y/1.htm" target="_blank">Y</a><a href="/tags/Z/1.htm" target="_blank">Z</a><a href="/tags/0/1.htm" target="_blank">其他</a>
        </div>
    </div>
</div>
<footer id="footer" class="mb30 mt30">
    <div class="container">
        <div class="footBglm">
            <a target="_blank" href="/">首页</a> -
            <a target="_blank" href="/custom/about.htm">关于我们</a> -
            <a target="_blank" href="/search/Java/1.htm">站内搜索</a> -
            <a target="_blank" href="/sitemap.txt">Sitemap</a> -
            <a target="_blank" href="/custom/delete.htm">侵权投诉</a>
        </div>
        <div class="copyright">版权所有 IT知识库 CopyRight © 2000-2050 E-COM-NET.COM , All Rights Reserved.
<!--            <a href="https://beian.miit.gov.cn/" rel="nofollow" target="_blank">京ICP备09083238号</a><br>-->
        </div>
    </div>
</footer>
<!-- 代码高亮 -->
<script type="text/javascript" src="/static/syntaxhighlighter/scripts/shCore.js"></script>
<script type="text/javascript" src="/static/syntaxhighlighter/scripts/shLegacy.js"></script>
<script type="text/javascript" src="/static/syntaxhighlighter/scripts/shAutoloader.js"></script>
<link type="text/css" rel="stylesheet" href="/static/syntaxhighlighter/styles/shCoreDefault.css"/>
<script type="text/javascript" src="/static/syntaxhighlighter/src/my_start_1.js"></script>





</body>

</html>