Nginx的安装

# yum install gcc pcre-devel zlib-devel –y

#./configure –prefix=/usr/local/nginx

#make && make install

启动nginx:

# /usr/local/nginx/sbin/nginx
# lsof -i:80

基本配置:

配置文件

worker_processes   1;

定义工作进程的数量。建议为CPU核心数量。(六核为6)

events {

worker_connections  1024;

}

events为进程线程混合工作模式,Apache使用prefork模式.

每个工作进程的最大连接数量。理论上每台服务器的最大连接数为:worker_connections*
worker_processes

http {

include       mime.types;            #定义数据类型($path/conf/mime.types)

default_type  application/octet-stream;

#log_format  main  '$remote_addr
- $remote_user [$time_local] "$request" '

#                  '$status
$body_bytes_sent "$http_referer" '

#                  '"$http_user_agent"
"$http_x_forwarded_for"';

#access_log  logs/access.log  main;

sendfile        on;

#是否以零拷贝的方式来提升文件传输性能。普通应用应开启;下载类应用建议关闭。

#tcp_nopush     on;

#防止网络阻塞,在sendfile为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;

location
/ {

root   html;

index  index.html
index.htm;

}

}

……

发布默认网站:

相关设置字段:

server {

listen       80;

server_name  localhost;

location
/
{                           相当于Apache的DocumentRoot,文档根目录

root   html;

index  index.html
index.htm;

}

1)准备网页

[root@Nginx html]#
mv index.html index.html.bak

[root@Nginx html]#
vim index.html

[root@Nginx html]#
cat index.html

Hello,Danny!

[root@Nginx html]#
ls

50x.html  index.html  index.html.bak

2)测试:

elinks http://localhost --dump

Hello,Danny!

防盗链:

制作做一个盗链

<html>

<body>

<a href="http://192.168.18.254/a.png">盗链测试</a>

</body>

</html>

nginx服务器上防盗链:

http {

include       mime.types;

default_type  application/octet-stream;

sendfile        on;

keepalive_timeout  65;

server
{

listen       80;

server_name  www.a.com;

location
/ {

root   html;

index  index.html
index.htm;

}

location
~*.(gif|jpe?g|png|swf|flv)$
 {          #匹配图片格式

valid_referers
none blocked *.baidu.com;      #valid_referers定义允许倒链的

if
   ($invalid_referer)
{                   #判断如果是不允许倒链的,我们返回403

return
403;  #403错误表示服务器收到请求,但拒绝提供页面

}

}

}

}

释义:

none 代表没有referer

blocked 代表有referer但是被防火墙或者是代理给去除了

URL重写:

环境:

13.1.1.1   主机名 www.a.com  扮演nginx提供web和客户端角色

13.1.1.200 主机名www.b.com

客户端访问www.a.com  ——> Nginx(www.b.com)

先看一下默认首页

1)nginx配置文件

worker_processes  1;

events {

worker_connections  1024;

}

http {

include       mime.types;

default_type  application/octet-stream;

sendfile        on;

keepalive_timeout  65;

server
{

listen       80;

server_name  www.a.com;

location
/ {

root   html;

index  index.html
index.htm;

}

error_page   500
502 503 504  /50x.html;

location
= /50x.html {

root   html;

}

}

}

2)结合解析

vim /etc/hosts

echo
“127.0.0.1  www.a.com” >>/etc/hosts

此时使用浏览器,输入www.a.com即可得到nginx提供的web页面

3)nginx重写,将访问www.a.com的请求交给www.b.com

worker_processes  1;

events {

worker_connections  1024;

}

http {

include       mime.types;

default_type  application/octet-stream;

sendfile        on;

keepalive_timeout  65;

server
{

listen       80;

server_name  www.a.com;

location
/ {

#    root   html;

#   index  index.html
index.htm;

rewrite
^/$ http://www.b.com;

}

error_page   500
502 503 504  /50x.html;

location
= /50x.html {

root   html;

}

}

}

4)客户端(nginx)修改域名解析

vim
/etc/hosts

127.0.0.1       www.a.com

13.1.1.200
www.b.com

5)设置13.1.1.200的web服务

/etc/init.d/httpd
restart

echo
“rewrite” > /var/www/html/index.html

6)测试

在nginx浏览器上输入www.a.com ——>得到rewrite

限速:

实验环境:

客户端:13.1.1.200

nginx服务器:13.1.1.1

实验说明:

本实验涉及三个部分,1从下载开始即限速;2下载一定大小后开始限速;3避免下载软件恶意(多进程)下载造成服务器压力多大

实验一:下载开始即限速

1)              先来看一下不限速的现在速率

在nginx文档根目录下创建大文件:

[root@Nginx conf]#
dd if=/dev/zero of=/usr/local/nginx/html/bigfile bs=1M count=100

在客户端上测试下载速率

[root@Lvs1 opt]#
wget http://192.168.19.253/bigfile

--2016-11-09
22:29:14--  http://13.1.1.1/bigfile

正在连接 13.1.1.1:80... 已连接。

已发出 HTTP 请求,正在等待回应... 200 OK

长度:104857600 (100M) [application/octet-stream]

正在保存至: “bigfile”

100%[======================================>]
104,857,600 44.0M/s   in 2.3s

2)              配置nginx配置文件限速并重启nginx

worker_processes  1;

events {

worker_connections  1024;

}

http {

include       mime.types;

default_type  application/octet-stream;

sendfile        on;

keepalive_timeout  65;

server
{

listen       80;

server_name  www.a.com;

location
/ {

root   html;

index  index.html
index.htm;

#rewrite
^/$ http://www.b.com;

limit_rate 100k;

}

error_page   500
502 503 504  /50x.html;

location
= /50x.html {

root   html;

}

}

}

3)              测试限速功能

[root@Lvs1 opt]#
wget http://192.168.19.253/bigfile

--2016-11-09
22:35:54--  http://13.1.1.1/bigfile

正在连接 13.1.1.1:80... 已连接。

已发出 HTTP 请求,正在等待回应... 200 OK

长度:104857600 (100M) [application/octet-stream]

正在保存至: “bigfile”

0%
[                                       ]
406,120     99.6K/s

实验二:文件下载到一定大小后限速的设置及测试

nginx配置

设置下载到90M之后,按照每秒100k的速率下载。

worker_processes  1;

events {

worker_connections  1024;

}

http {

include       mime.types;

default_type  application/octet-stream;

sendfile        on;

keepalive_timeout  65;

server
{

listen       80;

server_name  www.a.com;

location
/ {

root   html;

index  index.html
index.htm;

#rewrite
^/$ http://www.b.com;

limit_rate_after
90m;

limit_rate
100k;

}

error_page   500
502 503 504  /50x.html;

location
= /50x.html {

root   html;

}

}

}

客户端测试:

[root@Lvs1 opt]#
rm -fr bigfile

[root@Lvs1 opt]#
wget http://13.1.1.1/bigfile

--2016-11-09
22:37:57--  http://13.1.1.1/bigfile

正在连接 13.1.1.1:80... 已连接。

已发出 HTTP 请求,正在等待回应... 200 OK

长度:104857600 (100M) [application/octet-stream]

正在保存至: “bigfile”

[==================================>    ]
94,576,640  27.9M/s

[==================================>    ]
94,883,840  21.1M/s

[==================================>    ]
94,883,840  17.3M/s

[==================================>    ]
94,883,840  14.6M/s

[==================================>  ]
95,191,040  12.4M/s
[==================================>  ]
95,191,040  11.0M/s
[==================================>    ]
95,191,040  9.86M/s eta

实验三:防止恶意下载造成服务器压力多大

1)模拟恶意软件恶意下载

客户端脚本:

#!/bin/bash

for i in `seq 1
10`

do

wget
http://192.168.19.253/bigfile >/dev/null &

done

解释:模拟客户端开启10个进程下载服务器资源

执行脚本,忙打ps aux | grep wget 可以看到10个wget进程(慢了看不到)

2)限制每个源IP最多开三个下载

配置文件:

worker_processes  1;

events {

worker_connections  1024;

}

http {

include       mime.types;

default_type  application/octet-stream;

sendfile        on;

keepalive_timeout  65;

limit_conn_zone
 $binary_remote_addr  zone=*:300k;

#同一源IP地址最大带宽300K

server
{

listen       80;

server_name  www.a.com;

location
/ {

root   html;

index  index.html
index.htm;

#rewrite
^/$ http://www.b.com;

#limit_rate_after
90m;

limit_rate 100k;

limit_conn
* 3;  //同一源地址最多三个下载进程

}

error_page   500
502 503 504  /50x.html;

location
= /50x.html {

root   html;

}

}

}

再次执行恶意下载脚本,忙打ps aux | grep wget,看到只有3个wget进程

root     18505  0.1  0.1  10244  1488
pts/0    S    23:12   0:00
wget http://13.1.1.1/bigfile

root     18507  0.1  0.1  10244  1492
pts/0    S    23:12   0:00
wget http://13.1.1.1/bigfile

root     18514  0.1  0.1  10244  1488
pts/0    S    23:12   0:00
wget http://13.1.1.1/bigfile

root     18517  0.0  0.0   6052   768
pts/0    S+   23:12   0:00
grep wget

虚拟主机:

实验环境:

OS:rhel6.7

Nginx:1.5.1

客户端:192.168.19.249

Nginx:192.168.19.{253,254}

基于端口:

1) 修改配置文件

[root@Nginx
nginx]# vim conf/nginx.conf

server
{

listen       80;

#   server_name  localhost;      跟主机名没关系

location
/ {

root   html;

index  index.html
index.htm;

}

}

server
{

listen       8080;

#   server_name  localhost;               跟主机名没关系

location
/ {

root   www;

index  index.html
index.htm;

}

}

2)增加8080端口对应的根目录www及首页文件

mkdir
/usr/local/nginx/www

echo
8080 > /usr/local/nginx/www/index.html

3)重启nginx

[root@Nginx
nginx]# killall -s HUP nginx

4)验证

elinks http://localhost --dump

elinks http://localhost:8080 --dump

基于域名

1)配置文件

[root@Nginx
nginx]# vim conf/nginx.conf

server
{

listen       80;

server_name  www.a.com;

location
/ {

root   html;

index  index.html
index.htm;

}

}

server
{

listen       80;

server_name  www.b.com;

location
/ {

root   www;

index  index.html
index.htm;

}

}

2)域名解析

[root@Nginx
nginx]# vim /etc/hosts

192.168.19.253        www.a.com

192.168.19.253        www.b.com

3)网页制作

[root@Nginx
nginx]# echo "www.a.com" > /usr/local/nginx/html/index.html

[root@Nginx
nginx]# echo "www.b.com" > /usr/local/nginx/www/index.html

4)重启服务

[root@Nginx
nginx]# killall -s HUP nginx

基于IP(很少用,IP太贵)

1)配置文件

server
{

listen       192.168.19.253:80;

#   server_name  localhost;

location
/ {

root   html;

index  index.html
index.htm;

}

}

server
{

listen       192.168.19.254:80;

#   server_name  localhost;

location
/ {

root   www;

index  index.html
index.htm;

}

}

2)查看服务监听端口—此时监听的是从本机上所有网卡过来的http请求

[root@Nginx
nginx]# netstat -tlnp | grep 80

tcp        0      0 0.0.0.0:80                  0.0.0.0:*                   LISTEN      25183/nginx

3)添加一块网卡(别名),并重启nginx

[root@Nginx
nginx]# ifconfig eth0:1 192.168.19.254

[root@Nginx
nginx]# killall -s HUP nginx

4)重启服务,查看监听端口—此时监听 192.168.19.253 和 192.168.19.254 网卡进来的请求

[root@Nginx
nginx]# netstat -tlunp | grep 80

tcp        0      0 192.168.19.253:80                 0.0.0.0:*                   LISTEN      25060/nginx

tcp        0      0 192.168.19.254:80                 0.0.0.0:*                   LISTEN      25060/nginx

5) 测试

[root@Nginx
nginx]# elinks http:// 192.168.19.253--dump

www.a.com

[root@Nginx
nginx]# elinks http:// 192.168.19.254--dump

www.b.com

反向代理:

代理(proxy)服务器:

一般是指局域网内部的机器通过代理服务器发送请求到互联网上服务器。代理服务器一般作用在客户端,如FQ神器。

代理(proxy)请求过程:

客户端首先与代理服务器建立连接,然后根据代理服务器所使用的代理协议,请求对目标服务器创建连接、发送请求、获得数据,最后将数据发送给客户端。

Web代理(proxy)服务器是网络的中间实体。代理位于web客户端和web服务器之间,扮演“中间人”的角色。http的代理服务器既是web服务器又是web客户端。

正向代理:(针对客户端的代理)

是一个位于客户端和原始服务器(origin server)之间的服务器,为了从原始服务器取得内容,客户端向代理发送一个请求并指定目标(如:YouTube),然后代理向原始服务器转交请求并将获得的内容返回给客户端。客户端必须要进行一些特别的设置才能使用正想代理。

反向代理服务器:(针对服务器的代理)

在服务器端接受客户端的请求,然后把请求分发给具体的服务器进行处理,然后再将服务器的响应结果反馈给客户端。Nginx就是其中的一个反向代理服务器软件。

反向代理和正向代理相反。对于客户端而言代理服务器就像是原始服务器,并且客户端不需要进行特别的设置。客户端向反向代理发送连接请求,接着反向代理判断将请求转发给哪一台真实服务器,并将获得的内容返还给客户端。

如图:

用户A始终认为它访问的原始服务器是Z而不是B,但实际上是反向代理服务器Z接受用户A的应答。然后Z从原始服务器B中取得数据,然后发送给A。

由于防火墙的作用,只允许代理服务器Z访问原始服务器B。这样就保护了原始服务器B。

实验:

环境:

客户端:192.168.18.1

代理服务器:192.168.18.254

原始服务器:192.168.18.10

1、配置代理:

server
{

listen       80;

server_name  localhost;

location
/ {

#root   html;  关闭本机的页面服务

#index   index.html
index.htm;

proxy_pass  http://192.168.18.10;  遇到请求本代理服务器目录的请求,转发给原始服务器。

}

2、配置原始服务器的页面

[root@origin 桌面]# cat /var/www/html/index.html

test
page

3、测试

在客户端打开浏览器,输入192.168.18.254---会收到原始服务器提供的页面

小升级---端口映射

1、更改原始服务器的上的httpd程序运行端口号为8080

[root@origin
html]# vim /etc/httpd/conf/httpd.conf

#Listen
12.34.56.78:80

Listen 8080

[root@origin
html]# service httpd restart

2、修改代理服务器的配置文件

proxy_pass  http://192.168.18.10:8080;

(以上解释:将客户端对代理服务器80端口的请求映射到了原始服务器8080端口)

3、测试

客户端浏览器仍可以正常访问原始服务器的页面:test page

看一下整个连接过程:

操作说明:

客户端访问反向代理服务器,在原始服务器上抓包,下面是抓包结果:

从上面的结果来看,

1、先是客户端与反向代理服务器建立连接,然后反向代理服务器再与原始服务器建立连接。

2、对于服务器来说并不知道真正的客户端是谁。

如果想让服务器知道真正的客户端是谁,我们可以对nginx(代理)做一下操作:

在源服务器上抓包看结果:

从上图中可以看出,响应消息中已经有了真实客户端的IP地址了。但是我们去看一下源服务器的日志文件---并没有记录真实客户端的IP地址---而只能看到是代理服务器来要的数据!

如果需要让源服务器日志记录真实客户端的IP地址,修改web软件(如果服务器是nginx则不需要设置)的配置文件如下操作:

LNMP和动态页面:

Lnmp

Php 5.4之前的版本和之后的版本在将其变成服务时操作不同,在lamp架构时使用php-fpm模块将5.4之后的版本变成了服务,下面使用5.4之前的版本将其变成服务,需要用到一个软件:spawn-fcgi

Nginx服务器上:

1、先去安装PHP

[root@smbserver 桌面]# yum install php-* mysql-server mysql -y

2、安装spawn软件包

[root@smbserver 桌面]# rpm -ivh spawn-fcgi-1.6.3-1.el5.i386.rpm(该命令最好用yum安装)

注意安装该软件后会带来一个命令:spawn-fcgi  (spawn:引起,酿成,大量生产)

相关选项:

-f 指定生成的fastCGI程序的文件名

-a

绑定地址

-p
  绑定端口

-u   指定uid

-g   指定gid,默认是uid的主要组

-P
  spawn程序的pid文件

-C
  生成子进程的数量

[root@Nginx 桌面]# spawn-fcgi -a 127.0.0.1 -u nobody -P
/var/run/php.pid -C 5 -p 9000 -f /usr/bin/php-cgi

spawn-fcgi: child
spawned successfully: PID: 14544

[root@Nginx 桌面]# ps -ef | grep 14544

nobody   14544     1  0
19:04 ?        00:00:00
/usr/bin/php-cgi

nobody   14545
14544  0 19:04
?        00:00:00 /usr/bin/php-cgi

nobody   14546
14544  0 19:04
?        00:00:00 /usr/bin/php-cgi

nobody   14547
14544  0 19:04
?        00:00:00 /usr/bin/php-cgi

nobody   14548
14544  0 19:04
?        00:00:00 /usr/bin/php-cgi

nobody   14549
14544  0 19:04
?        00:00:00 /usr/bin/php-cgi

root     14578
14483  0 19:07 pts/3    00:00:00 grep 14544

管理php-cgi   ---使用脚本脚本名称php-cgi

该脚本存放在nginx目录中的liu目录中

3、测试

[root@Nginx 桌面]# php_cgi restart

停止 php-cgi: [确定]

正在启动 php-cgi:spawn-fcgi: child
spawned successfully: PID: 14940

[确定]

注:可将该启动管理脚本拷贝到/etc/init.d目录下,符合我们的使用习惯

4、让nginx支持动态页面

location
/ {

root   html;

index  index.php index.html
index.htm;

#将index.php放到最前面(最优先读取)

}

location
~ \.php$ {

root           html;

fastcgi_pass   127.0.0.1:9000;

fastcgi_index  index.php;

fastcgi_param  SCRIPT_FILENAME /usr/local/nginx/html/$fastcgi_script_name;

include        fastcgi_params;

}

5、生成一个动态页面

[root@Nginx
nginx]# vim html/index.php

释义:date(),定制时间格式;time()调用系统时间

6、测试

本机输入localhost  多次回车会看到不同的页面

 Nginx的基础优化:

一、最大连接数

二、独立CPU核心及绑定worker进程

三、压缩

四、缓存

一、最大连接数

•       默认情况下一个程序最多可以打开1024个文件(fd)

•       ulimit –n

•       设置 ulimit –SHn 65535  ——>
/etc/security/limits.conf永久设置

在/etc/security/limits.conf最后增加如下两行记录
* soft nofile 65535
* hard nofile 65535

•       请求本地资源

•       max_clients=min(worker_connections,nofile)

•       nofile(/etc/security/limits.conf)为最多开打开的fd

•       作为反向代理服务器

•       max_clients=min(worker_connections,nofile)*worker_processes/2

关于上面max_clients计算方法说明:(一般系统的nofile设置都比worker_processes高,所以下面公式可直接使用worker_processes计算)

从用户的角度,http 1.1协议下,由于浏览器默认使用两个并发连接,因此计算方法:
   nginx作为http服务器的时候:
    max_clients = worker_processes * worker_connections/2
   nginx作为反向代理服务器的时候:
    max_clients = worker_processes * worker_connections/4

或者从一般建立连接的角度:客户并发连接为1.
   nginx作为http服务器的时候:
    max_clients = worker_processes * worker_connections
   nginx作为反向代理服务器的时候:
    max_clients = worker_processes * worker_connections/2

nginx做反向代理时,和客户端之间保持一个连接,和后端服务器保持一个连接。

ab测试:

1、实验环境

客户端:192.168.18.1

服务器192.168.18.254

2、服务器配置文件让服务器提供页面服务

3、客户端ab测试

4、修改配置文件worker_connections和系统的ulimit值为65535并测试

二、将worker进程绑定到固定的CPU核心上

测试用服务器上又四颗核心

1、查看当前nginx的相关进程信息

2、修改配置文件开启3个worker进程。前提是服务器需要有至少3个CPU核心(cat /proc/cpuinfo)

3、查看进程运行在哪个核心上。psr为CPU核心编号

4、我们发现编号为1的核心没有被用到,下面3个worker分别绑在编号为1,2,3的核心上

(设置内核参数(/boot/grub/grub.conf),让每个worker平均分配给cpu。配置文件,重启系统生效。)

5、      重启系统后修改nginx改配置文件,将每个nginx进程绑定到固定的cpu核心上:

因为是四个核心所以四个0000,又因为只给3个worker进程绑定cpu核心上,所以只有三个,1代表核心的位置,从左至右0010  0100  1000,最左边的那个0是给master进程使用的第一块(0)核心,如下:

6、      查看worker进程绑定情况

三、压缩

释义:

开启gzip压缩

http协议的版本(1.0不支持压缩)

当客户端是微软IE1-6版本时,不启用压缩

压缩的数据类型

数据低于1KB时不压缩

指定压缩等级,可选值1~9

指定4个8KB的压缩空间,特点是边压缩边发送,所以32KB的空间是够用的。

四、缓存——指定客户端的缓存有效期

使用缓存的意义:

降低服务器的压力;

减少带宽占用。

实验:
    客户端:192.168.18.1

服务器:192.168.18.254

1、设置客户端缓存有效期

2、测试

2.1 客户端访问服务器,可以得到页面。

2.2 服务端关闭nginx,客户端关闭浏览器---打开浏览器---访问192.168.18.254

nginx的安装应用的更多相关文章

  1. Nginx服务安装配置

    1.Nginx介绍 Nginx是一个高性能的HTTP和反向代理服务器,由俄罗斯人开发的,第一个版本发布于2004年10月4日.Nginx由于出色的性能,在世界范围内受到了越来越多人的关注,其特点是占有 ...

  2. Django Nginx+uwsgi 安装配置

    使用 python manage.py runserver 来运行服务器.这只适用测试环境中使用. 正式发布的服务,我们需要一个可以稳定而持续的服务器,比如apache, Nginx, lighttp ...

  3. mysql 自动备份和nginx自动安装脚本

    一.自动备份Mysql脚本: 如下脚本为mysql自动备份脚本,仅供参考,可以根据实际情况修改. #!/bin/sh #auto backup mysql #wugk #Define PATH定义变量 ...

  4. nginx的安装

    1,,nginx的安装 为什么使用nginx我就不多说了,很优秀的,请再行google 在安装前,先安装pcre,安装zlib,安装openssl,以及一些其他包 yum install -y gcc ...

  5. nginx编译安装

    Nginx编译安装 1.nginx官网:http://wiki.nginx.org/Install下载:http://nginx.org/en/download.html 2.编译安装# wget h ...

  6. nginx 的安装

    一.必要软件准备1.安装pcre 为了支持rewrite功能,我们需要安装pcre 复制代码代码如下: # yum install pcre* //如过你已经装了,请跳过这一步 2.安装openssl ...

  7. linux/centos下安装nginx(rpm安装和源码安装)详细步骤

    Centos下安装nginx rpm包                                                                                 ...

  8. nginx的安装与配置

    1.nginx的安装与配置 编译安装nginx需要实现安装开发包组“Development tools”和“Server Platform Development”.“Desktop Platform ...

  9. nginx笔记----安装

    nginx的安装 ./configure make && make install (一)准备条件: 1.GCC---gun编译器集合 Nginx是一个由C语言编写的程序,因此首先需要 ...

  10. Linux下Nginx的安装、升级及动态添加模块

    系统基于ubuntu server 14.04.4 amd64 安装 第一步 下载并解压Nginx压缩包 从Nginx官网下载Nginx,或者在Linux上执行wget http://nginx.or ...

随机推荐

  1. 【opatch打补丁】oracle10.2.0.5.0升级10.2.0.5.9 for linux

    https://wenku.baidu.com/view/c38702b56edb6f1afe001f59.html    这篇文章也不错,可参考 任务:oracle 10.2.0.5.0 打补丁升级 ...

  2. 【POJ 3476】A Game with Colored Balls

    POJ 3476 首先写了个treap,然后常数太大tle了... 然后想了个极为复杂的方法,是一共7个dsu,3个bit,还有一个set.然后写了一半就歇菜了... 然后看dxm的方法,是这样做的: ...

  3. RabbitMq、ActiveMq、ZeroMq、kafka之间的比较

    MQ框架非常之多,比较流行的有RabbitMq.ActiveMq.ZeroMq.kafka.这几种MQ到底应该选择哪个?要根据自己项目的业务场景和需求.下面我列出这些MQ之间的对比数据和资料. 第一部 ...

  4. rook 入门理解

    参考:https://my.oschina.net/u/2306127/blog/1830356?from=timeline 1.Rook通过一个操作器(operator)完成后续操作,只需要定义需要 ...

  5. java算法----排序----(7)堆排序

    package log; import java.util.Arrays; public class Test4 { /** * 堆排序 * * @param args */ public stati ...

  6. Luogu3676 小清新数据结构题 动态点分治

    传送门 换根类型的统计问题动态点分治都是很好做的. 设所有点的点权和为$sum$ 首先,我们先不考虑求$\sum\limits_i s_i^2$,先考虑如何在换根的情况下求$\sum\limits_i ...

  7. [JSOI2016]病毒感染[dp]

    题意 有 \(n​\) 个村庄按标号排列,每个村庄有一个死亡速度 \(a_i​\) 表示每天死 \(a_i​\) 人(除非你治好这个村庄). 你从 1 号村庄出发,每天可以选择向相邻的村庄进发或者治愈 ...

  8. 学习ML.NET(2): 使用模型进行预测

    训练模型 在上一篇文章中,我们已经通过LearningPipeline训练好了一个“鸢尾花瓣预测”模型, var model = pipeline.Train<IrisData, IrisPre ...

  9. 机器学习 第五篇:分类(kNN)

    K最近邻(kNN,k-NearestNeighbor)算法是一种监督式的分类方法,但是,它并不存在单独的训练过程,在分类方法中属于惰性学习法,也就是说,当给定一个训练数据集时,惰性学习法简单地存储或稍 ...

  10. Openstack部署踩坑

    第一周: 使用kola部署Openstack,vip_address有问题,双网上也不行,就是部署不了,但all-in-one却可以,可是节点不会加. 第二周: 使用Packstack部署Openst ...