Nginx入门到实战
location 语法
location 有”定位”的意思, 根据Uri来进行不同的定位.
在虚拟主机的配置中,是必不可少的,location可以把网站的不同部分,定位到不同的处理方式上.
比如, 碰到.php, 如何调用PHP解释器? --这时就需要location
location 的语法
location [=|~|~*|^~] patt {
}
中括号可以不写任何参数,此时称为一般匹配
也可以写参数
因此,大类型可以分为3种
location = patt {} [精准匹配]
location patt{} [一般匹配]
location ~ patt{} [正则匹配]
如何发挥作用?:
首先看有没有精准匹配,如果有,则停止匹配过程.
location = patt {
config A
}
如果 $uri == patt,匹配成功,使用configA
location = / {
root /var/www/html/;
index index.htm index.html;
}
location / {
root /usr/local/nginx/html;
index index.html index.htm;
}
如果访问 http://xxx.com/
定位流程是
1: 精准匹配中 ”/” ,得到index页为 index.htm
2: 再次访问 /index.htm , 此次内部转跳uri已经是”/index.htm” ,
根目录为/usr/local/nginx/html
3: 最终结果,访问了 /usr/local/nginx/html/index.htm
再来看,正则也来参与.
location / {
root /usr/local/nginx/html;
index index.html index.htm;
}
location ~ image {
root /var/www/image;
index index.html;
}
如果我们访问 http://xx.com/image/logo.png
此时, “/” 与”/image/logo.png” 匹配
同时,”image”正则 与”image/logo.png”也能匹配,谁发挥作用?
正则表达式的成果将会使用.
图片真正会访问 /var/www/image/logo.png
location / {
root /usr/local/nginx/html;
index index.html index.htm;
}
location /foo {
root /var/www/html;
index index.html;
}
我们访问 http://xxx.com/foo
对于uri “/foo”, 两个location的patt,都能匹配他们
即
‘/’能从左前缀匹配 ‘/foo’, ‘/foo’也能左前缀匹配’/foo’,
此时, 真正访问 /var/www/html/index.html
原因:’/foo’匹配的更长,因此使用之.;
rewrite 重写
重写中用到的指令
if (条件) {} 设定条件,再进行重写
set #设置变量
return
#返回状态码
break #跳出rewrite
rewrite
#重写
If 语法格式
If 空格 (条件) {
重写模式
}
条件又怎么写?
答:3种写法
1: “=”来判断相等, 用于字符串比较
2: “~” 用正则来匹配(此处的正则区分大小写)
~* 不区分大小写的正则
3: -f -d
-e来判断是否为文件,为目录,是否存在.
例子:
if ($remote_addr
= 192.168.1.100) {
return 403;
}
if ($http_user_agent
~ MSIE) {
rewrite ^.*$ /ie.htm;
break; #(不break会循环重定向)
}
if (!-e
$document_root$fastcgi_script_name) {
rewrite ^.*$ /404.html break;
}
注, 此处还要加break,
以
xx.com/dsafsd.html这个不存在页面为例,
我们观察访问日志, 日志中显示的访问路径,依然是GET
/dsafsd.html HTTP/1.1
提示: 服务器内部的rewrite和302跳转不一样.
跳转的话URL都变了,变成重新http请求404.html,
而内部rewrite, 上下文没变,
就是说
fastcgi_script_name 仍然是 dsafsd.html,因此 会循环重定向.
set 是设置变量用的, 可以用来达到多条件判断时作标志用.
达到apache下的
rewrite_condition的效果
如下: 判断IE并重写,且不用break; 我们用set变量来达到目的
if
($http_user_agent ~* msie) {
set $isie 1;
}
if ($fastcgi_script_name = ie.html)
{
set $isie 0;
}
if ($isie 1) {
rewrite ^.*$ ie.html;
}
Rewrite语法
Rewrite 正则表达式 定向后的位置 模式
Goods-3.html
---->Goods.php?goods_id=3
goods-([\d]+)\.html
---> goods.php?goods_id =$1
location
/ecshop {
index
index.php;
rewrite
goods-([\d]+)\.html$ /ecshop/goods.php?id=$1;
rewrite
article-([\d]+)\.html$ /ecshop/article.php?id=$1;
rewrite
category-(\d+)-b(\d+)\.html /ecshop/category.php?id=$1&brand=$2;
rewrite
category-(\d+)-b(\d+)-min(\d+)-max(\d+)-attr([\d\.]+)\.html
/ecshop/category.php?id=$1&brand=$2&price_min=$3&price_max=$4&filter_attr=$5;
rewrite
category-(\d+)-b(\d+)-min(\d+)-max(\d+)-attr([\d+\.])-(\d+)-([^-]+)-([^-]+)\.html
/ecshop/category.php?id=$1&brand=$2&price_min=$3&price_max=$4&filter_attr=$5&page=$6&sort=$7&order=$8;
}
注意:用url重写时, 正则里如果有”{}”,正则要用双引号包起来
----------------------------------------------------------------------------------------------------------------------------
nginx+php的配置比较简单,核心就一句话----
把请求的信息转发给9000端口的PHP进程,
让PHP进程处理 指定目录下的PHP文件.
如下例子:
location ~ \.php$ {
root html;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
1:碰到php文件,
2: 把根目录定位到 html,
3: 把请求上下文转交给9000端口PHP进程,
4: 并告诉PHP进程,当前的脚本是 $document_root$fastcgi_scriptname
(注:PHP会去找这个脚本并处理,所以脚本的位置要指对)
五、基本配置
#打开主配置文件,若你是用lnmp环境安装
vim /usr/local/nginx/conf/nginx.conf
----------------------------------------
user #设置nginx服务的系统使用用户
worker_processes #工作进程数 一般情况与CPU核数保持一致
error_log #nginx的错误日志
pid #nginx启动时的pid
events {
worker_connections #每个进程允许最大连接数
use #nginx使用的内核模型
}
我们使用 nginx 的 http 服务,在配置文件 nginx.conf 中的 http 区域内,配置无数个 server ,每一个 server 对应这一个虚拟主机或者域名
http {
... ... #后面再详细介绍 http 配置项目
server {
listen 80 #监听端口;
server_name localhost #地址
location / { #访问首页路径
root /xxx/xxx/index.html #默认目录
index index.html index.htm #默认文件
}
error_page 500 504 /50x.html #当出现以上状态码时从新定义到50x.html
location = /50x.html { #当访问50x.html时
root /xxx/xxx/html #50x.html 页面所在位置
}
}
server {
... ...
}
}
一个 server 可以出现多个 location ,我们对不同的访问路径进行不同情况的配置
我们再来看看 http 的配置详情
http {
sendfile on #高效传输文件的模式 一定要开启
keepalive_timeout 65 #客户端服务端请求超时时间
log_format main XXX #定义日志格式 代号为main
access_log /usr/local/access.log main #日志保存地址 格式代码 main
}
六、模块
查看 nginx 已开启和编联进去的模块,模块太多了,就不在这长篇大论,有需要自行百度吧~
#大写V查看所有模块,小写v查看版本
nginx -V
# 查看此配置文件 是否存在语法错误
nginx -tc /usr/local/nginx/conf/nginx.conf
Nginx入门到实战 - 场景实现篇
一、静态资源WEB服务
1.静态资源类型
非服务器动态运行生成的文件,换句话说,就是可以直接在服务器上找到对应文件的请求
浏览器端渲染:HTML,CSS,JS
图片:JPEG,GIF,PNG
视频:FLV,MPEG
文件:TXT,任意下载文件
2.静态资源服务场景-CDN
什么是CDN?例如一个北京用户要请求一个文件,而文件放在的新疆的资源存储中心,如果直接请求新疆距离太远,延迟久。使用nginx静态资源回源,分发给北京的资源存储中心,让用户请求的动态定位到北京的资源存储中心请求,实现传输延迟的最小化
nginx静态资源配置
配置域:http、server、location
#文件高速读取
http {
sendfile on;
}
#在 sendfile 开启的情况下,开启 tcp_nopush 提高网络包传输效率
#tcp_nopush 将文件一次性一起传输给客户端,就好像你有十个包裹,快递员一次送一个,来回十趟,开启后,快递员讲等待你十个包裹都派件,一趟一起送给你
http {
sendfile on;
tcp_nopush on;
}
#tcp_nodelay 开启实时传输,传输方式与 tcp_nopush 相反,追求实时性,但是它只有在长连接下才生效
http {
sendfile on;
tcp_nopush on;
tcp_nodelay on;
}
#将访问的文件压缩传输 (减少文件资源大小,提高传输速度)
#当访问内容以gif或jpg结尾的资源时
location ~ .*\.(gif|jpg)$ {
gzip on; #开启
gzip_http_version 1.1; #服务器传输版本
gzip_comp_level 2; #压缩比,越高压缩越多,压缩越高可能会消耗服务器性能
gzip_types text/plain application/javascript application/x-javascript text/javascript text/css application/xml application/xml+rss image/jpeg image/gif image/png; #压缩文件类型
root /opt/app/code; #对应目录(去该目录下寻找对应文件)
}
#直接访问已压缩文件
#当访问路径以download开头时,如www.baidu.com/download/test.img
#去/opt/app/code目录下寻找test.img.gz文件,返回到前端时已是可以浏览的img文件
location ~ load^/download {
gzip_static on #开启;
tcp_nopush on;
root /opt/app/code;
}
二、浏览器缓存
HTTP协议定义的缓存机制(如:Expires; Cache-control等 )
减少服务端的消耗,降低延迟
1.浏览器无缓存
浏览器请求 -> 无缓存 -> 请求WEB服务器 -> 请求相应 -> 呈现
在呈现阶段会根据缓存的设置在浏览器中生成缓存
2.浏览器有缓存
浏览器请求 -> 有缓存 -> 校验本地缓存时间是否过期 -> 没有过期 -> 呈现
若过期从新请求WEB服务器
3.语法配置
location ~ .*\.(html|htm)$ {
expires 12h; #缓存12小时
}
服务器响应静态文件时,请求头信息会带上 etag 和 last_modified_since 2个标签值,浏览器下次去请求时,头信息发送这两个标签,服务器检测文件有没有发生变化,如无,直接头信息返 etag 和last_modified_since,状态码为 304 ,浏览器知道内容无改变,于是直接调用本地缓存,这个过程也请求了服务,但是传着的内容极少
三、跨站访问
开发nginx跨站访问设置
location ~ .*\.(html|htm)$ {
add_header Access-Control-Allow-Origin *;
add_header Access-Control-Allow-Methods GET,POST,PUT,DELETE,OPTIONS;
#Access-Control-Allow-Credentials true #允许cookie跨域
}
在响应中指定 Access-Control-Allow-Credentials 为 true 时,Access-Control-Allow-Origin 不能指定为 *,需要指定到具体域名
相关跨域内容可参考 Laravel 跨域功能中间件 使用代码实现跨域,原理与nginx跨域配置相同
四、防盗链
防止服务器内的静态资源被其他网站所套用
此处介绍的 nginx 防盗链为基础方式,其它更加深入的方式将在之后的文章介绍
首先,需要理解一个nginx变量
$http_referer #表示当前请求上一次页面访问的地址,换句话说,访问 www.baidu.com 主页,这是第一次访问,所以 $http_referer 为空,但是 访问此页面的时候还需要获取一张首页图片,再请求这张图片的时候 $http_referer 就为 www.baidu.com
然后配置
location ~ .*\.(jpg|gif)$ {
#valid_referers 表示我们允许哪些 $http_referer 来访问
#none 表示没有带 $http_referer,如第一次访问时 $http_referer 为空
#blocked 表示 $http_referer 不是标准的地址,非正常域名等
#只允许此ip
valid_referers none blocked 127.xxx.xxx.xx
if ($invalid_referer) { #不满足情况下变量值为1
return 403;
}
}
五、HTTP代理服务
Nginx可以实现多种代理方式
HTTP
ICMPPOPIMAP
HTTPS
RTMP
1. 代理区别
区别在于代理的对象不一样
正向代理代理的对象是客户端
反向代理代理的对象是服务端
2. 反向代理
语法:proxy_pass URL
默认:——
位置:loaction
#代理端口
#场景:服务器80端口开放,8080端口对外关闭,客户端需要访问到8080
#在nginx中配置proxy_pass代理转发时,如果在proxy_pass后面的url加/,表示绝对根路径;如果没有/,表示相对路径,把匹配的路径部分也给代理走
server {
listen 80;
location / {
proxy_pass http://127.0.0.1:8080/;
proxy_redirect default;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr; #获取客户端真实IP
proxy_connect_timeout 30; #超时时间
proxy_send_timeout 60;
proxy_read_timeout 60;
proxy_buffer_size 32k;
proxy_buffering on; #开启缓冲区,减少磁盘io
proxy_buffers 4 128k;
proxy_busy_buffers_size 256k;
proxy_max_temp_file_size 256k; #当超过内存允许储蓄大小,存到文件
}
}
Nginx入门到实战 - 负载均衡和缓存服务
一、负载均衡
负载均衡的实现方法就是我们上章介绍的反向代理 。将客户的请求通过 nginx 分发(反向代理)到一组多台不同的服务器上
这一组服务器我们称为 服务池(upstream server),池内的每一个服务器称为一个 单元,服务池内将对每一个单元进行请求轮训,实现负载均衡
#配置
语法:upstream name ...
默认:——
位置:http
upstream #自定义组名 {
server x1.baidu.com; #可以是域名
server x2.baidu.com;
#server x3.baidu.com
#down 不参与负载均衡
#weight=5; 权重,越高分配越多
#backup; 预留的备份服务器
#max_fails 允许失败的次数
#fail_timeout 超过失败次数后,服务暂停时间
#max_coons 限制最大的接受的连接数
#根据服务器性能不同,配置适合的参数
#server 106.xx.xx.xxx; 可以是ip
#server 106.xx.xx.xxx:8080; 可以带端口号
#server unix:/tmp/xxx; 支出socket方式
}
假设我们有三台服务器,并且假设它们的IP地址,前端负载均衡服务器A(127.0.0.1),后台服务器B(127.0.0.2),后台服务器C(127.0.0.3)
新建文件 proxy.conf,内容如下,上一章介绍的反向代理配置
proxy_redirect default;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_connect_timeout 30;
proxy_send_timeout 60;
proxy_read_timeout 60;
proxy_buffer_size 32k;
proxy_buffering on;
proxy_buffers 4 128k;
proxy_busy_buffers_size 256k;
proxy_max_temp_file_size 256k;
#服务器A的配置
http {
...
upstream xxx {
server 127.0.0.2;
server 127.0.0.3;
}
server {
liseten 80;
server_name localhost;
location / {
proxy_pass http://xxx #upstream 对应自定义名称
include proxy.conf;
}
}
}
#服务器B、服务器C的配置
server {
liseten 80;
server_name localhost;
location / {
index index.html
}
}
调度算法
轮训:按时间顺序逐一分配到不同的后端服务器
加权轮训:weight值越大,分配到的几率越高
ip_hash:每个请求按访问IP的hash结果分配,这样来自同一个IP固定访问一个后端服务器
least_conn:最少链接数,哪个机器连接数少就分发给谁
url_hash:按照访问的URL的hash结果来分配请求,每一个URL定向到同一个后端服务器
hash关键数值:hash自定义key
ip_hash 配置
upstream xxx {
ip_hash;
server 127.0.0.2;
server 127.0.0.3;
}
ip_hash存在缺陷,当前端服务器再多一层时,将获取不到用户的正确IP,获取的将是前一个前端服务器的IP,因此 nginx1.7.2版本推出了 url_hash
url_hash 配置
upstream xxx {
hash $request_uri;
server 127.0.0.2;
server 127.0.0.3;
}
二、缓存服务
1. 缓存类型
服务端缓存:缓存存储在后端服务器,如redis,memcache
代理缓存:缓存存储在代理服务器或者中间件上,它的内容是从后端服务器获取的,但是保存在自己本地
客户端缓存:缓存在浏览器内的
2. nginx 代理缓存
客户端请求nginx,nginx查看本地是否有缓存数据,若有直接返回给客户端,若没有再去后端服务器请求
http {
proxy_cache_path /var/www/cache #缓存地址
levels=1:2 #目录分级
keys_zone=test_cache:10m #开启的keys空间名字:空间大小(1m可以存放8000个key)
max_size=10g #目录最大大小(超过时,不常用的将被删除)
inactive=60m #60分钟内没有被访问的缓存将清理
use_temp_path=pff; #是否开启存放临时文件目录,关闭默认存储在缓存地址
server {
...
location / {
proxy_cache test_cache; #开启缓存对应的名称,在keys_zone命名好
proxy_cache_valid 200 304 12h; #状态码为200 304的缓存12小时
proxy_cache_valid any 10m; #其他状态缓存10小时
proxy_cache_key $host$uri$is_args$args; #设置key值
add_header Nginx-Cache "$upstream_cache_status";
}
}
}
当有个特定请求我们不需要缓存的时候,在上面配置的内容中加入以下配置
server {
...
if ($request_uri ~ ^/(login|register) ) { #当请求地址有login或register时
set $nocache = 1; #设置一个自定义变量为true
}
location / {
proxy_no_cache $nocache $arg_nocache $arg_comment;
proxy_no_cache $http_pragma $http_authoriztion;
}
}
3. 分片请求
早期版本 nginx 对大文件的分片请求不支持缓存,1.9版本后slice模块实现了这个功能
前端发起请求,nginx去获取这个请求文件的大小,若超过我们的定义slice的大小,会进行切片,分割成多个小的请求去请求后端,到前端就成为一个一个独立的缓存文件
优势:每个子请求收到的数据都会形成独立文件,一个请求中断了,其他请求不受影响,原本情况请求中断,再次请求文件将从头开始,而开启分片请求,就接下去获取未请求的小文件
劣势:当文件很大或者slice很小时,可能会导致文件描述符耗尽等情况
语法:slice size; #当大文件请求时,设置size为每个小文件的大小
默认:slice 0;
位置:http/server/location
Nginx入门到实战 - 常见问题
一、相同 server_name 多个虚拟主机优先级
#当出现虚拟主机域名相同的情况,重启nginx时,会出现警告处理,但是并不不会阻止nginx继续使用
server {
listen 80;
server_name www.baidu.com
...
}
server {
listen 80;
server_name www.baidu.com
...
}
...
优先选择最新读取到的配置文件,当多个文件是通过include时,文件排序越靠前,越早被读取
二、location 匹配优先级
= #进行普通字符精确匹配,完全匹配
^~ #进行普通字符匹配,当前表示前缀匹配
~\~* #表示执行一个正则匹配()
#当程序使用精确匹配时,一但匹配成功,将停止其他匹配
#当正则匹配成功时,会继续接下来的匹配,寻找是否还有更精准的匹配
三、try_files的使用
按顺序检查文件是否存在
location / {
try_files $uri $uri/ /index.php;
}
#先查找$uri下是否有文件存在,若存在直接返回给用户
#若$url下没有文件存在,再次访问$uri/的路径是否有文件存在
#还是没有文件存在,交给index.php处理
例:
location / {
root /test/index.html
try_files $uri @test
}
location @test {
proxy_pass http://127.0.0.1:9090;
}
#访问 / 时,查看 /test/index.html 文件是否存在
#若不存在,让9090端口的程序去处理这个请求
四、alias和root的区别
location /request_path/image/ {
root /local_path/image/;
}
#当我们访问 http://xxx.com/request_path/image/cat.png时
#将访问 http://xxx.com/request_path/image/local_path/image/cat.png 下的文件
location /request_path/image/ {
alias /local_path/image/;
}
#当我们访问 http://xxx.com/request_path/image/cat.png时
#将访问 http://xxx.com/local_path/image/cat.png 下的文件
五、如果用户真实IP
当一个请求通过多个代理服务器时,用户的IP将会被代理服务器IP覆盖
#在第一个代理服务器中设置
set x_real_ip=$remote_addr
#最后一个代理服务器中获取
$x_real_ip=IP1
六、Nginx 常见错误码
413 Request Entity Too Large #上传文件过大,设置 client_max_body_size
503 bad gateway #后端服务无响应
504 Gateway Time-out #后端服务执行超时
七、Nginx 配置http ssl
server {
listen 443; #https和wss协议默认端口 # ssl的相关配置
ssl on;
ssl_certificate /www/etc/nginx/ssl/frp_ssl/1_hjrtest.kinwing.top_bundle.crt; //证书
ssl_certificate_key /www/etc/nginx/ssl/frp_ssl/2_hjrtest.kinwing.top.key; //证书
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers EECDH+CHACHA20:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5;
ssl_prefer_server_ciphers on;
ssl_buffer_size 1400;
add_header Strict-Transport-Security max-age=15768000;
add_header Cache-Control no-store;
ssl_stapling on;
ssl_stapling_verify on; server_name hjrtest.kinwing.top;
index index.html index.htm index.php; include /usr/local/nginx/conf/enable-php.conf; location / {
proxy_pass http://127.0.0.1:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
七、Nginx 配置websocket ssl
server {
listen 443; #https和wss协议默认端口 # ssl的相关配置
ssl on;
ssl_certificate /www/etc/nginx/ssl/webscoket_ssl/214587002080006.pem;
ssl_certificate_key /www/etc/nginx/ssl/webscoket_ssl/214587002080006.key;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers EECDH+CHACHA20:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5;
ssl_prefer_server_ciphers on;
ssl_buffer_size 1400;
add_header Strict-Transport-Security max-age=15768000;
add_header Cache-Control no-store;
ssl_stapling on;
ssl_stapling_verify on; server_name scoketssl.kinwing.top; # 转发wss协议
location /wss {
proxy_pass http://127.0.0.1:2345;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";
proxy_set_header X-Real-IP $remote_addr;
} # 转发https协议
location / {
proxy_pass http://127.0.0.1:9099;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
# add_header Access-Control-Allow-Origin *;
}
}
Nginx入门到实战的更多相关文章
- nginx入门与实战 安装 启动 配置nginx Nginx状态信息(status)配置 正向代理 反向代理 nginx语法之location详解
nginx入门与实战 网站服务 想必我们大多数人都是通过访问网站而开始接触互联网的吧.我们平时访问的网站服务 就是 Web 网络服务,一般是指允许用户通过浏览器访问到互联网中各种资源的服务. Web ...
- nginx入门与实战
网站服务 想必我们大多数人都是通过访问网站而开始接触互联网的吧.我们平时访问的网站服务 就是 Web 网络服务,一般是指允许用户通过浏览器访问到互联网中各种资源的服务. Web 网络服务是一种被动访问 ...
- 11,nginx入门与实战
网站服务 想必我们大多数人都是通过访问网站而开始接触互联网的吧.我们平时访问的网站服务 就是 Web 网络服务,一般是指允许用户通过浏览器访问到互联网中各种资源的服务. Web 网络服务是一种被动 ...
- nginx 入门实战
nginx入门实战 nginx 安装与卸载 下载安装 进入 http://nginx.org/en/download.html 下载自己想要的版本,我选择的stable版本 tar -zxvf ngi ...
- Nginx教程(一) Nginx入门教程
Nginx教程(一) Nginx入门教程 1 Nginx入门教程 Nginx是一款轻量级的Web服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like协议下发行.由 ...
- nginx入门教程
nginx入门教程 一.概述 什么是nginx? Nginx (engine x) 是一款轻量级的Web 服务器 .反向代理服务器及电子邮件(IMAP/POP3)代理服务器. 什么是反向 ...
- Nginx入门教程(转)
原文:https://www.cnblogs.com/qdhxhz/p/8910174.html nginx入门教程 一.概述 什么是nginx? Nginx (engine x) 是一款轻 ...
- Nginx教程(一) Nginx入门教程 (转)
1 Nginx入门教程 Nginx是一款轻量级的Web服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like协议下发行.由俄罗斯的程序设计师IgorSysoev所开 ...
- Docker技术入门与实战第2版-高清文字版
Docker技术入门与实战第2版-高清文字版 下载地址https://pan.baidu.com/s/1bAoRQQlvBa-PXy5lgIlxUg 扫码下面二维码关注公众号回复100011 获取 ...
随机推荐
- POI读取Excel如何判断行为空
public static boolean isRowEmpty(Row row) { for (int c = row.getFirstCellNum(); c < row.getLastCe ...
- 使用idea 搭建一个 SpringBoot + Mybatis + logback 的maven 项目
(注意项目名不能有大写......),把项目类型 改成 War 类型.(web项目) 使用 mybatis-generator 插件 生成 实体类 和 接口 在 resources 目录 中 新建一个 ...
- BZOJ 1818: [Cqoi2010]内部白点 (BIT + 扫描线)
就是求多条线段的交点数,直接BIT+扫描线就行了. 注意不要算重最初存在的点. CODE #include<bits/stdc++.h> using namespace std; char ...
- Ribbon整合Consul,出现No instances available for XXX 异常
先贴代码: @RestController public class CallHelloController { @Autowired private LoadBalancerClient loadB ...
- Remote API(RAPI)之 文件管理
RAPI库由一组函数组成,这些函数可用于通过桌面应用程序管理设备,包括设备的目录文件.设备的注册表和系统信息. RAPI提供了一组文件管理方法 CeCopyFile:复制文件 CeCreateDire ...
- 51 Nod 1629 B君的圆锥
1629 B君的圆锥 基准时间限制:1 秒 空间限制:131072 KB 分值: 10 难度:2级算法题 收藏 关注 B君要用一个表面积为S的圆锥将白山云包起来. B君希望包住的白山云体积尽量大 ...
- 『NOIP 2019Day2 T3』 保卫王国(defense)
重温NOIP2018的试题,发现只要好好想想还是能想出一些东西的. 比如说本题是一个DDP的模板题,硬是做成了倍增优化DP的题目. 对于给出的$n$个节点的树,每个点都有点权$v_i$,共$Q$次询问 ...
- [spring cloud] [error] java.lang.IllegalStateException: Only one connection receive subscriber allowed.
前言 最近在开发api-gateway的时候遇到了一个问题,网上能够找到的解决方案也很少,之后由公司的大佬解决了这个问题.写下这篇文章记录一下解决方案.希望可以帮助到更多的人. 环境 java版本:8 ...
- php 解析json失败,解析为空,json在线解析器可以解析,但是json_decode()解析失败(原)
$str2='{"code":200,"datas":{"id":1,"coupon_id":"123&quo ...
- DOM访问关系(父节点 子节点)
把下面的知识点掌握了,可以做一下下面的案例,都是工作中常用的,很有用 知识点 1.带Eleent和不带区别 a)带Element的获取的是元素节点 b)不带Element的获取文本 ...