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/1835513699826233344.htm"
                           title="android系统selinux中添加新属性property" target="_blank">android系统selinux中添加新属性property</a>
                        <span class="text-muted">辉色投像</span>

                        <div>1.定位/android/system/sepolicy/private/property_contexts声明属性开头:persist.charge声明属性类型:u:object_r:system_prop:s0图12.定位到android/system/sepolicy/public/domain.te删除neverallow{domain-init}default_prop:property</div>
                    </li>
                    <li><a href="/article/1835509391361667072.htm"
                           title="Linux下QT开发的动态库界面弹出操作(SDL2)" target="_blank">Linux下QT开发的动态库界面弹出操作(SDL2)</a>
                        <span class="text-muted">13jjyao</span>
<a class="tag" taget="_blank" href="/search/QT%E7%B1%BB/1.htm">QT类</a><a class="tag" taget="_blank" href="/search/qt/1.htm">qt</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/sdl2/1.htm">sdl2</a><a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a>
                        <div>需求:操作系统为linux,开发框架为qt,做成需带界面的qt动态库,调用方为java等非qt程序难点:调用方为java等非qt程序,也就是说调用方肯定不带QApplication::exec(),缺少了这个,QTimer等事件和QT创建的窗口将不能弹出(包括opencv也是不能弹出);这与qt调用本身qt库是有本质的区别的思路:1.调用方缺QApplication::exec(),那么我们在接口</div>
                    </li>
                    <li><a href="/article/1835504596898902016.htm"
                           title="linux sdl windows.h,Windows下的SDL安装" target="_blank">linux sdl windows.h,Windows下的SDL安装</a>
                        <span class="text-muted">奔跑吧linux内核</span>
<a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a><a class="tag" taget="_blank" href="/search/sdl/1.htm">sdl</a><a class="tag" taget="_blank" href="/search/windows.h/1.htm">windows.h</a>
                        <div>首先你要下载并安装SDL开发包。如果装在C盘下,路径为C:\SDL1.2.5如果在WINDOWS下。你可以按以下步骤:1.打开VC++,点击"Tools",Options2,点击directories选项3.选择"Includefiles"增加一个新的路径。"C:\SDL1.2.5\include"4,现在选择"Libaryfiles“增加"C:\SDL1.2.5\lib"现在你可以开始编写你的第</div>
                    </li>
                    <li><a href="/article/1835503712899002368.htm"
                           title="linux中sdl的使用教程,sdl使用入门" target="_blank">linux中sdl的使用教程,sdl使用入门</a>
                        <span class="text-muted">Melissa Corvinus</span>
<a class="tag" taget="_blank" href="/search/linux%E4%B8%ADsdl%E7%9A%84%E4%BD%BF%E7%94%A8%E6%95%99%E7%A8%8B/1.htm">linux中sdl的使用教程</a>
                        <div>本文通过一个简单示例讲解SDL的基本使用流程。示例中展示一个窗口,窗口里面有个随机颜色快随机移动。当我们鼠标点击关闭按钮时间窗口关闭。基本步骤如下:1.初始化SDL并创建一个窗口。SDL_Init()初始化SDL_CreateWindow()创建窗口2.纹理渲染存储RGB和存储纹理的区别:比如一个从左到右由红色渐变到蓝色的矩形,用存储RGB的话就需要把矩形中每个点的具体颜色值存储下来;而纹理只是一</div>
                    </li>
                    <li><a href="/article/1835502578050363392.htm"
                           title="PHP环境搭建详细教程" target="_blank">PHP环境搭建详细教程</a>
                        <span class="text-muted">好看资源平台</span>
<a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a><a class="tag" taget="_blank" href="/search/php/1.htm">php</a>
                        <div>PHP是一个流行的服务器端脚本语言,广泛用于Web开发。为了使PHP能够在本地或服务器上运行,我们需要搭建一个合适的PHP环境。本教程将结合最新资料,介绍在不同操作系统上搭建PHP开发环境的多种方法,包括Windows、macOS和Linux系统的安装步骤,以及本地和Docker环境的配置。1.PHP环境搭建概述PHP环境的搭建主要分为以下几类:集成开发环境:例如XAMPP、WAMP、MAMP,这</div>
                    </li>
                    <li><a href="/article/1835501948011376640.htm"
                           title="使用 FinalShell 进行远程连接(ssh 远程连接 Linux 服务器)" target="_blank">使用 FinalShell 进行远程连接(ssh 远程连接 Linux 服务器)</a>
                        <span class="text-muted">编程经验分享</span>
<a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E5%B7%A5%E5%85%B7/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/ssh/1.htm">ssh</a><a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a>
                        <div>目录前言基本使用教程新建远程连接连接主机自定义命令路由追踪前言后端开发,必然需要和服务器打交道,部署应用,排查问题,查看运行日志等等。一般服务器都是集中部署在机房中,也有一些直接是云服务器,总而言之,程序员不可能直接和服务器直接操作,一般都是通过ssh连接来登录服务器。刚接触远程连接时,使用的是XSHELL来远程连接服务器,连接上就能够操作远程服务器了,但是仅用XSHELL并没有上传下载文件的功能</div>
                    </li>
                    <li><a href="/article/1835493373906087936.htm"
                           title="libyuv之linux编译" target="_blank">libyuv之linux编译</a>
                        <span class="text-muted">jaronho</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>文章目录一、下载源码二、编译源码三、注意事项1、银河麒麟系统(aarch64)(1)解决armv8-a+dotprod+i8mm指令集支持问题(2)解决armv9-a+sve2指令集支持问题一、下载源码到GitHub网站下载https://github.com/lemenkov/libyuv源码,或者用直接用git克隆到本地,如:gitclonehttps://github.com/lemenko</div>
                    </li>
                    <li><a href="/article/1835490712716668928.htm"
                           title="第六集如何安装CentOS7.0,3分钟学会centos7安装教程" target="_blank">第六集如何安装CentOS7.0,3分钟学会centos7安装教程</a>
                        <span class="text-muted">date分享</span>

                        <div>从光盘引导系统按回车键继续进入引导程序安装界面,选择语言这里选择简体中文版点击继续选择桌面安装下面给系统分区选择磁盘,点击完成选择基本分区,点击加号swap分区,大小填内存的两倍在选择根分区,使用所有可用的磁盘空间选择文件系统ext4点击完成,点击开始安装设置root密码,点击完成设置普通用户和密码,点击完成整个过程持续八分钟左右根据个人配置不同,时间长短不同好,现在点击重启系统进入重启状态点击本</div>
                    </li>
                    <li><a href="/article/1835489588169240576.htm"
                           title="ARM驱动学习之5 LEDS驱动" target="_blank">ARM驱动学习之5 LEDS驱动</a>
                        <span class="text-muted">JT灬新一</span>
<a class="tag" taget="_blank" href="/search/%E5%B5%8C%E5%85%A5%E5%BC%8F/1.htm">嵌入式</a><a class="tag" taget="_blank" href="/search/C/1.htm">C</a><a class="tag" taget="_blank" href="/search/%E5%BA%95%E5%B1%82/1.htm">底层</a><a class="tag" taget="_blank" href="/search/arm%E5%BC%80%E5%8F%91/1.htm">arm开发</a><a class="tag" taget="_blank" href="/search/%E5%AD%A6%E4%B9%A0/1.htm">学习</a><a class="tag" taget="_blank" href="/search/%E5%8D%95%E7%89%87%E6%9C%BA/1.htm">单片机</a>
                        <div>ARM驱动学习之5LEDS驱动知识点:•linuxGPIO申请函数和赋值函数–gpio_request–gpio_set_value•三星平台配置GPIO函数–s3c_gpio_cfgpin•GPIO配置输出模式的宏变量–S3C_GPIO_OUTPUT注意点:DRIVER_NAME和DEVICE_NAME匹配。实现步骤:1.加入需要的头文件://Linux平台的gpio头文件#include//三</div>
                    </li>
                    <li><a href="/article/1835485681187647488.htm"
                           title="【华为OD技术面试真题精选 - 非技术题】 -HR面,综合面_华为od hr面" target="_blank">【华为OD技术面试真题精选 - 非技术题】 -HR面,综合面_华为od hr面</a>
                        <span class="text-muted">一个射手座的程序媛</span>
<a class="tag" taget="_blank" href="/search/%E7%A8%8B%E5%BA%8F%E5%91%98/1.htm">程序员</a><a class="tag" taget="_blank" href="/search/%E5%8D%8E%E4%B8%BAod/1.htm">华为od</a><a class="tag" taget="_blank" href="/search/%E9%9D%A2%E8%AF%95/1.htm">面试</a><a class="tag" taget="_blank" href="/search/%E8%81%8C%E5%9C%BA%E5%92%8C%E5%8F%91%E5%B1%95/1.htm">职场和发展</a>
                        <div>最后的话最近很多小伙伴找我要Linux学习资料,于是我翻箱倒柜,整理了一些优质资源,涵盖视频、电子书、PPT等共享给大家!资料预览给大家整理的视频资料:给大家整理的电子书资料:如果本文对你有帮助,欢迎点赞、收藏、转发给朋友,让我有持续创作的动力!网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。需要这份系统化的资料的朋友,可以点击这里获</div>
                    </li>
                    <li><a href="/article/1835482277870661632.htm"
                           title="简介Shell、zsh、bash" target="_blank">简介Shell、zsh、bash</a>
                        <span class="text-muted">zhaosuningsn</span>
<a class="tag" taget="_blank" href="/search/Shell/1.htm">Shell</a><a class="tag" taget="_blank" href="/search/zsh/1.htm">zsh</a><a class="tag" taget="_blank" href="/search/bash/1.htm">bash</a><a class="tag" taget="_blank" href="/search/shell/1.htm">shell</a><a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a><a class="tag" taget="_blank" href="/search/bash/1.htm">bash</a>
                        <div>Shell是Linux和Unix的外壳,类似衣服,负责外界与Linux和Unix内核的交互联系。例如接收终端用户及各种应用程序的命令,把接收的命令翻译成内核能理解的语言,传递给内核,并把内核处理接收的命令的结果返回给外界,即Shell是外界和内核沟通的桥梁或大门。Linux和Unix提供了多种Shell,其中有种bash,当然还有其他好多种。Mac电脑中不但有bash,还有一个zsh,预装的,据说</div>
                    </li>
                    <li><a href="/article/1835479000600899584.htm"
                           title="Linux MariaDB使用OpenSSL安装SSL证书" target="_blank">Linux MariaDB使用OpenSSL安装SSL证书</a>
                        <span class="text-muted">Meta39</span>
<a class="tag" taget="_blank" href="/search/MySQL/1.htm">MySQL</a><a class="tag" taget="_blank" href="/search/Oracle/1.htm">Oracle</a><a class="tag" taget="_blank" href="/search/MariaDB/1.htm">MariaDB</a><a class="tag" taget="_blank" href="/search/Linux/1.htm">Linux</a><a class="tag" taget="_blank" href="/search/Windows/1.htm">Windows</a><a class="tag" taget="_blank" href="/search/ssl/1.htm">ssl</a><a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a><a class="tag" taget="_blank" href="/search/mariadb/1.htm">mariadb</a>
                        <div>进入到证书存放目录,批量删除.pem证书警告:确保已经进入到证书存放目录find.-typef-iname\*.pem-delete查看是否安装OpenSSLopensslversion没有则安装yuminstallopensslopenssl-devel开启SSL编辑/etc/my.cnf文件(没有的话就创建,但是要注意,在/etc/my.cnf.d/server.cnf配置了datadir的,</div>
                    </li>
                    <li><a href="/article/1835471058648526848.htm"
                           title="1分钟解决 -bash: mvn: command not found,在Centos 7中安装Maven" target="_blank">1分钟解决 -bash: mvn: command not found,在Centos 7中安装Maven</a>
                        <span class="text-muted">Energet!c</span>
<a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a>
                        <div>1分钟解决-bash:mvn:commandnotfound,在Centos7中安装Maven检查Java环境1下载Maven2解压Maven3配置环境变量4验证安装5常见问题与注意事项6总结检查Java环境Maven依赖Java环境,请确保系统已经安装了Java并配置了环境变量。可以通过以下命令检查:java-version如果未安装,请先安装Java。1下载Maven从官网下载:前往Apach</div>
                    </li>
                    <li><a href="/article/1835470932295118848.htm"
                           title="CentOS的根目录下,/bin 和 /sbin 用途和权限" target="_blank">CentOS的根目录下,/bin 和 /sbin 用途和权限</a>
                        <span class="text-muted">Energet!c</span>
<a class="tag" taget="_blank" href="/search/Linux%E6%97%A5%E5%B8%B8/1.htm">Linux日常</a><a class="tag" taget="_blank" href="/search/centos/1.htm">centos</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>
                        <div>CentOS的根目录下,/bin和/sbin用途和权限一、/bin(Binary)二、/sbin(SystemBinary)三、总结在CentOS的根目录下,/bin和/sbin目录有不同的用途和权限一、/bin(Binary)用途:存放系统的基本命令,这些命令对所有用户都是可用的。例如:ls、cp、mv、rm等。权限:普通用户和系统管理员都可以使用这些命令。二、/sbin(SystemBinar</div>
                    </li>
                    <li><a href="/article/1835469294436184064.htm"
                           title="【从浅识到熟知Linux】Linux发展史" target="_blank">【从浅识到熟知Linux】Linux发展史</a>
                        <span class="text-muted">Jammingpro</span>
<a class="tag" taget="_blank" href="/search/%E4%BB%8E%E6%B5%85%E5%AD%A6%E5%88%B0%E7%86%9F%E7%9F%A5Linux/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>归属专栏:从浅学到熟知Linux个人主页:Jammingpro每日努力一点点,技术变化看得见文章前言:本篇文章记录Linux发展的历史,因在介绍Linux过程中涉及的其他操作系统及人物,本文对相关内容也有所介绍。文章目录Unix发展史Linux发展史开源Linux官网企业应用情况发行版本在学习Linux前,我们可能都会问Linux从哪里来?它是如何发展的。但在介绍Linux之前,需要先介绍一下Un</div>
                    </li>
                    <li><a href="/article/1835467782687387648.htm"
                           title="linux 发展史" target="_blank">linux 发展史</a>
                        <span class="text-muted">种树的猴子</span>
<a class="tag" taget="_blank" href="/search/%E5%86%85%E6%A0%B8/1.htm">内核</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F/1.htm">操作系统</a><a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a><a class="tag" taget="_blank" href="/search/%E5%A4%A7%E6%95%B0%E6%8D%AE/1.htm">大数据</a>
                        <div>linux发展史说明此前对linux认识模糊一知半解,近期通过学习将自己对于linux的发展总结一下方便大家日后的学习。那Linux是目前一款非常火热的开源操作系统,可是linux是什么时候出现的,又是因为什么样的原因被开发出来的呢。以下将对linux的发展历程进行详细的讲解。目录一、Linux发展背景二、UINIX的诞生三、UNIX的重要分支-BSD的诞生四、Minix的诞生五、GNU与Free</div>
                    </li>
                    <li><a href="/article/1835466523163062272.htm"
                           title="Linux sh命令" target="_blank">Linux sh命令</a>
                        <span class="text-muted">fengyehongWorld</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>
                        <div>目录一.基本语法二.选项2.1-c字符串中读取内容,并执行2.1.1基本用法2.1.2获取当前目录下失效的超链接2.2-x每个命令执行之前,将其打印出来2.3结合Here文档使用一.基本语法⏹Linux和Unix系统中用于执行shell脚本或运行命令的命令。sh[选项][脚本文件][参数...]⏹选项-c:从字符串中读取内容,并执行。-x:在每个命令执行之前,将其打印出来。-s:从标准流中读取内容</div>
                    </li>
                    <li><a href="/article/1835466270955368448.htm"
                           title="Linux vi常用命令" target="_blank">Linux vi常用命令</a>
                        <span class="text-muted">fengyehongWorld</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>
                        <div>参考资料viコマンド(vimコマンド)リファレンス目录一.保存系命令二.删除系命令三.移动系命令四.复制粘贴系命令一.保存系命令⏹保存并退出:wq⏹强制保存并退出:wq!⏹退出(文件未编辑):q⏹强制退出(忽略已编辑内容):q!⏹另存为:w新文件名二.删除系命令⏹删除当前行dd⏹清空整个文档gg:移动到文档顶部dG:删除到最后一行ggdG三.移动系命令⏹移动到文档顶部gg⏹移动到文档底部#方式1G</div>
                    </li>
                    <li><a href="/article/1835465261080211456.htm"
                           title="CentOS 7官方源停服,配置本机光盘yum源" target="_blank">CentOS 7官方源停服,配置本机光盘yum源</a>
                        <span class="text-muted">码哝小鱼</span>
<a class="tag" taget="_blank" href="/search/linux%E8%BF%90%E7%BB%B4/1.htm">linux运维</a><a class="tag" taget="_blank" href="/search/centos/1.htm">centos</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>
                        <div>1、挂载系统光盘mkdir/mnt/isomount-oloop/tools/CentOS-7-x86_64-DVD-1810.iso/mnt/isocd/mnt/iso/Packages/rpm-ivh/mnt/iso/Packages/yum-utils-1.1.31-50.el7.noarch.rpm(图形界面安装,默契已安装)如安装yum-utils依赖错误,按提示安装依赖包rpm-ivh</div>
                    </li>
                    <li><a href="/article/1835461728423473152.htm"
                           title="第1步win10宿主机与虚拟机通过NAT共享上网互通" target="_blank">第1步win10宿主机与虚拟机通过NAT共享上网互通</a>
                        <span class="text-muted">学习3人组</span>
<a class="tag" taget="_blank" href="/search/%E5%A4%A7%E6%95%B0%E6%8D%AE/1.htm">大数据</a><a class="tag" taget="_blank" href="/search/%E5%A4%A7%E6%95%B0%E6%8D%AE/1.htm">大数据</a>
                        <div>VM的CentOS采用NAT共用宿主机网卡宿主机器无法连接到虚拟CentOS要实现宿主机与虚拟机通信,原理就是给宿主机的网卡配置一个与虚拟机网关相同网段的IP地址,实现可以互通。1、查看虚拟机的IP地址2、编辑虚拟机的虚拟网络的NAT和DHCP的配置,设置虚拟机的网卡选择NAT共享模式3、宿主机的IP配置,确保vnet8的IPV4属性与虚拟机在同一网段4、ping测试连通性[root@localh</div>
                    </li>
                    <li><a href="/article/1835452402178813952.htm"
                           title="Linux查看服务器日志" target="_blank">Linux查看服务器日志</a>
                        <span class="text-muted">TPBoreas</span>
<a class="tag" taget="_blank" href="/search/%E8%BF%90%E7%BB%B4/1.htm">运维</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>
                        <div>一、tail这个是我最常用的一种查看方式用法如下:tail-n10test.log查询日志尾部最后10行的日志;tail-n+10test.log查询10行之后的所有日志;tail-fn10test.log循环实时查看最后1000行记录(最常用的)一般还会配合着grep用,(实时抓包)例如:tail-fn1000test.log|grep'关键字'(动态抓包)tail-fn1000test.log</div>
                    </li>
                    <li><a href="/article/1835443696431099904.htm"
                           title="笋丁网页自动回复机器人V3.0.0免授权版源码" target="_blank">笋丁网页自动回复机器人V3.0.0免授权版源码</a>
                        <span class="text-muted">希希分享</span>
<a class="tag" taget="_blank" href="/search/%E8%BD%AF%E5%B8%8C%E7%BD%9158soho_cn/1.htm">软希网58soho_cn</a><a class="tag" taget="_blank" href="/search/%E6%BA%90%E7%A0%81%E8%B5%84%E6%BA%90/1.htm">源码资源</a><a class="tag" taget="_blank" href="/search/%E7%AC%8B%E4%B8%81%E7%BD%91%E9%A1%B5%E8%87%AA%E5%8A%A8%E5%9B%9E%E5%A4%8D%E6%9C%BA%E5%99%A8%E4%BA%BA/1.htm">笋丁网页自动回复机器人</a>
                        <div>笋丁网页机器人一款可设置自动回复,默认消息,调用自定义api接口的网页机器人。此程序后端语言使用Golang,内存占用最高不超过30MB,1H1G服务器流畅运行。仅支持Linux服务器部署,不支持虚拟主机,请悉知!使用自定义api功能需要有一定的建站基础。源码下载:https://download.csdn.net/download/m0_66047725/89754250更多资源下载:关注我。安</div>
                    </li>
                    <li><a href="/article/1835431575303581696.htm"
                           title="#千锋逆战班 郭燕 学习的一天开启" target="_blank">#千锋逆战班 郭燕 学习的一天开启</a>
                        <span class="text-muted">郭千岁呗</span>

                        <div>在千锋"逆战"学习云计算第17天加油努力会有好结果复习昨天知识中国加油!武汉加油!千峰加油!我自己加油!</div>
                    </li>
                    <li><a href="/article/1835417097660887040.htm"
                           title="Linux CTF逆向入门" target="_blank">Linux CTF逆向入门</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/CTF/1.htm">CTF</a>
                        <div>1.ELF格式我们先来看看ELF文件头,如果想详细了解,可以查看ELF的manpage文档。关于ELF更详细的说明:e_shoff:节头表的文件偏移量(字节)。如果文件没有节头表,则此成员值为零。sh_offset:表示了该section(节)离开文件头部位置的距离+-------------------+|ELFheader|---++--------->+-------------------</div>
                    </li>
                    <li><a href="/article/1835415332345442304.htm"
                           title="NPM私库搭建-verdaccio(Linux)" target="_blank">NPM私库搭建-verdaccio(Linux)</a>
                        <span class="text-muted">Beam007</span>
<a class="tag" taget="_blank" href="/search/npm/1.htm">npm</a><a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a>
                        <div>1、安装nodelinux服务器安装nodea)、官网下载所需的node版本https://nodejs.org/dist/v14.21.0/b)、解压安装包若下载的是xxx.tar.xz文件,解压命令为tar-xvfxxx.tar.xzc)、修改环境变量修改:/etc/profile文件#SETPATHFORNODEJSexportNODE_HOME=NODEJS解压安装的路径exportPAT</div>
                    </li>
                    <li><a href="/article/1835412182377000960.htm"
                           title="信息系统安全相关概念(上)" target="_blank">信息系统安全相关概念(上)</a>
                        <span class="text-muted">YuanDaima2048</span>
<a class="tag" taget="_blank" href="/search/%E8%AF%BE%E7%A8%8B%E7%AC%94%E8%AE%B0/1.htm">课程笔记</a><a class="tag" taget="_blank" href="/search/%E5%9F%BA%E7%A1%80%E6%A6%82%E5%BF%B5/1.htm">基础概念</a><a class="tag" taget="_blank" href="/search/%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/%E7%AC%94%E8%AE%B0/1.htm">笔记</a>
                        <div>文章总览:YuanDaiMa2048博客文章总览下篇:信息系统安全相关概念(下)信息系统安全相关概念[上]信息系统概述信息系统信息系统架构信息系统发展趋势:信息系统日趋大型化、复杂化信息系统面临的安全威胁信息系统安全架构设计--以云计算为例信息系统安全需求及安全策略自主访问控制策略DAC强制访问控制策略MAC信息系统概述信息系统用于收集、存储和处理数据以及传递信息、知识和数字产品的一组集成组件。几</div>
                    </li>
                    <li><a href="/article/1835410666316460032.htm"
                           title="【2023年】云计算金砖牛刀小试6" target="_blank">【2023年】云计算金砖牛刀小试6</a>
                        <span class="text-muted">geekgold</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/%E6%9C%8D%E5%8A%A1%E5%99%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/kubernetes/1.htm">kubernetes</a><a class="tag" taget="_blank" href="/search/%E5%AE%B9%E5%99%A8/1.htm">容器</a>
                        <div>第一套【任务1】私有云服务搭建[10分]【题目1】基础环境配置[0.5分]使用提供的用户名密码,登录提供的OpenStack私有云平台,在当前租户下,使用CentOS7.9镜像,创建两台云主机,云主机类型使用4vCPU/12G/100G_50G类型。当前租户下默认存在一张网卡,自行创建第二张网卡并连接至controller和compute节点(第二张网卡的网段为10.10.X.0/24,X为工位号</div>
                    </li>
                    <li><a href="/article/1835400463676174336.htm"
                           title="C++常见知识掌握" target="_blank">C++常见知识掌握</a>
                        <span class="text-muted">nfgo</span>
<a class="tag" taget="_blank" href="/search/c%2B%2B/1.htm">c++</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a>
                        <div>1.Linux软件开发、调试与维护内核与系统结构Linux内核是操作系统的核心,负责管理硬件资源,提供系统服务,它是系统软件与硬件之间的桥梁。主要组成部分包括:进程管理:内核通过调度器分配CPU时间给各个进程,实现进程的创建、调度、终止等操作。使用进程描述符(task_struct)来存储进程信息,包括状态(就绪、运行、阻塞等)、优先级、内存映射等。内存管理:包括物理内存和虚拟内存管理。通过页表映</div>
                    </li>
                    <li><a href="/article/1835399577818198016.htm"
                           title="linux脚本sed替换变量,sed 命令中替换值为shell变量" target="_blank">linux脚本sed替换变量,sed 命令中替换值为shell变量</a>
                        <span class="text-muted">诺坎普之约</span>
<a class="tag" taget="_blank" href="/search/linux%E8%84%9A%E6%9C%ACsed%E6%9B%BF%E6%8D%A2%E5%8F%98%E9%87%8F/1.htm">linux脚本sed替换变量</a>
                        <div>文章目录sed命令中替换值为shell变量替换基本语法sed中替换使用shell变量总结参考文档sed命令中替换值为shell变量替换基本语法大家都是sed有很多用法,最多就应该是替换一些值了。让我们先回忆sed的替换语法。在sed进行替换的时候sed-i's/old/new/g'1.txtecho"hellooldfrank"|sed's/old/new/g'结果如下:hellonewfrank</div>
                    </li>
                    <li><a href="/article/1835398694636187648.htm"
                           title="RK3229_Android9.0_Box 4G模块EC200A调试" target="_blank">RK3229_Android9.0_Box 4G模块EC200A调试</a>
                        <span class="text-muted">suifen_</span>
<a class="tag" taget="_blank" href="/search/%E7%BD%91%E7%BB%9C/1.htm">网络</a>
                        <div>0、kernel修改这部分完全可以参考Linux的移植:RK3588EC200A-CN【4G模块】调试_rkec200a-cn-CSDN博客1、修改device/rockchip/rk322xdiff--gita/device.mkb/device.mkindexec6bfaa..e7c32d1100755---a/device.mk+++b/device.mk@@-105,6+105,8@@en</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>