Nginx 的一些常见功能(windows,AspNet ,IIS)
下载
官方网站:https://nginx.org/en/download.html
nginx –s reload start nginx nginx -s stopNetstat –ano|findstr “8022”
端口“8080”被PID(进程号)为2448的进程占用。
查看端口“8080”被哪个应用占用,,继续执行下面命令:
tasklist|findstr "2448"
2.1 按进程号关闭进程
taskkill /pid 2152多个时格式为:
taskkill /pid 2152 /pid 1284
2.2 按进程名关闭进程
如要关闭notepad.exe,格式为:
taskkill /im notepad.exe
指定多个时格式为:
taskkill /im notepad.exe /im iexplorer.exe
如果是要关闭所有的,则使用通配符*,即:
taskkill /im *.exe
2.3 有提示的关闭进程
taskkill /t /im notepad.exe
taskkill /t /pid 2152
下载,解压缩是这个样子
启动:
启动方式有两种
方式一:双击nginx.exe
方式二:进入cmd 到该目录下,运行 start nginx
启动闪退,查看错误日志,原因是80端口已经被占用了,所以我们找到nginx.conf文件,换了一个监听的端口8085
错误日志文件
,再次启动,启动成功,启动成功。发现多了一个nginx.pid文件,在浏览器里面访问localhost:8035
这个样子就是成功了
这里是日志文件
记录了每次请求
接下来,我们做第一个nginx常用的功能:
使用ngxix负载均衡
把请求分散到多个主机
这里我们新建了一个aspnetmvc项目,功能很简单,
发布之后,复制两个一样的文件夹,只改动web。Config里面的serverid。分别部署到8001端口,8002端口
8001的配置文件
8002的配置文件
Serverid 1
Serverid 2
我们的目标是:访问8035端口时,将请求通过nginx转到8001和8002
配置前:
8085
8001
8002
开始配置
1,在server节点上面加入 upstream节点,起个名字 my_web_server,
在大括号里面加入要映射的地址,格式是 server + 地址 +权重,权重越高,访问越多
2,修改server节点,里面的server_name 和上面保持一致
3,修改 location 节点 名字也要和上面保持一致
齐活。
保存配置文件,在cmd中重启nginx配置文件
重启命令 nginx –s reload
然后我们再去访问8085 ,配置成功
,
可以看到一次1,一次二,目前是两个不加任何策略配置
接下来我们加上ip_hash 的策略
接着访问多次8085
,发现他只会映射到8001上面去,这个就是ip_hash策略的作用:根据不通ip的哈希值,指定到固定端口上面去,ip_hash是很常用的一种策略,可以解决一点点的session不共享问题
其他的几种策略这里不再赘述,
可以去看看这里 https://blog.csdn.net/balalamm/article/details/79916483
使用nginx代理二级目录
我们经常会遇到这样的 结构
比如说这是某个应用的接口地址http://api.example.com/,他有v1和v2两个版本
放在不同的服务器或者端口上,我们想使用下面的url来请求
http://api.example.com/v1/ 和 http://api.example.com/v2/
这时候我们就可以是用nginx来处理
我们的目标是
请求 http://localhost:8085/v1/ 转到8001端口
请求 http://localhost:8085/v2/ 转到8002端口
修改配置文件,这里暂时用不到upstream 节点了
修改成这个样子
加一个location 就行,是不是很简单,注意8001/后面的斜杠 /一定不能少
效果图 v1/
V2/
Nginx的功能是十分强大,以上只是基础,其他的功能比如:使用nginx防盗链,请求日志记录,拦截请求等等,使用nginx实现要比在应用程序中实现简单快捷很多,总而言之就是nginx很有学习的必要。
附录:nginx常量对照表(原文 https://blog.csdn.net/echizao1839/article/details/80872378)
$http_user_agent, $http_cookie, 等等。下面是nginx支持的所有内置变量:
$arg_name:请求中的的参数名,即“?”后面的arg_name=arg_value形式的arg_name
$args:请求中的参数值
$binary_remote_addr:客户端地址的二进制形式, 固定长度为4个字节
$body_bytes_sent:传输给客户端的字节数,响应头不计算在内;这个变量和Apache的mod_log_config模块中的“%B”参数保持兼容
$bytes_sent:传输给客户端的字节数 (1.3.8, 1.2.5)
$connection:TCP连接的序列号 (1.3.8, 1.2.5)
$connection_requests:TCP连接当前的请求数量 (1.3.8, 1.2.5)
$content_length:“Content-Length” 请求头字段
$content_type:“Content-Type” 请求头字段
$cookie_name:cookie名称
$document_root:当前请求的文档根目录或别名
$document_uri:同 $uri
$host:优先级如下:HTTP请求行的主机名>”HOST”请求头字段>符合请求的服务器名
$hostname:主机名
$http_name:匹配任意请求头字段; 变量名中的后半部分“name”可以替换成任意请求头字段,如在配置文件中需要获取http请求头:“Accept-Language”,那么将“-”替换为下划线,大写字母替换为小写,形如:$http_accept_language即可。
$https:如果开启了SSL安全模式,值为“on”,否则为空字符串。
$is_args:如果请求中有参数,值为“?”,否则为空字符串。
$limit_rate:用于设置响应的速度限制,详见 limit_rate。
$msec:当前的Unix时间戳 (1.3.9, 1.2.6)
$nginx_version:nginx版本
$pid:工作进程的PID
$pipe:如果请求来自管道通信,值为“p”,否则为“.” (1.3.12, 1.2.7)
$proxy_protocol_addr:获取代理访问服务器的客户端地址,如果是直接访问,该值为空字符串。(1.5.12)
$query_string:同 $args
$realpath_root:当前请求的文档根目录或别名的真实路径,会将所有符号连接转换为真实路径。
$remote_addr:客户端地址
$remote_port:客户端端口
$remote_user:用于HTTP基础认证服务的用户名
$request:代表客户端的请求地址
$request_body:客户端的请求主体,此变量可在location中使用,将请求主体通过proxy_pass, fastcgi_pass, uwsgi_pass, 和 scgi_pass传递给下一级的代理服务器。
$request_body_file:将客户端请求主体保存在临时文件中。文件处理结束后,此文件需删除。如果需要之一开启此功能,需要设置client_body_in_file_only。如果将次文件传递给后端的代理服务器,需要禁用request body,即设置proxy_pass_request_body off,fastcgi_pass_request_body off, uwsgi_pass_request_body off, or scgi_pass_request_body off 。
$request_completion:如果请求成功,值为”OK”,如果请求未完成或者请求不是一个范围请求的最后一部分,则为空。
$request_filename:当前连接请求的文件路径,由root或alias指令与URI请求生成。
$request_length:请求的长度 (包括请求的地址, http请求头和请求主体) (1.3.12, 1.2.7)
$request_method:HTTP请求方法,通常为“GET”或“POST”
$request_time:处理客户端请求使用的时间 (1.3.9, 1.2.6); 从读取客户端的第一个字节开始计时。
$request_uri:这个变量等于包含一些客户端请求参数的原始URI,它无法修改,请查看$uri更改或重写URI,不包含主机名,例如:”/cnphp/test.php?arg=freemouse”。
$scheme:请求使用的Web协议, “http” 或 “https”
$sent_http_name:可以设置任意http响应头字段; 变量名中的后半部分“name”可以替换成任意响应头字段,如需要设置响应头Content-length,那么将“-”替换为下划线,大写字母替换为小写,形如:$sent_http_content_length 4096即可。
$server_addr:服务器端地址,需要注意的是:为了避免访问linux系统内核,应将ip地址提前设置在配置文件中。
$server_name:服务器名,www.cnphp.info
$server_port:服务器端口
$server_protocol:服务器的HTTP版本, 通常为 “HTTP/1.0” 或 “HTTP/1.1”
$status:HTTP响应代码 (1.3.2, 1.2.2)
$tcpinfo_rtt, $tcpinfo_rttvar, $tcpinfo_snd_cwnd, $tcpinfo_rcv_space:客户端TCP连接的具体信息
$time_iso8601:服务器时间的ISO 8610格式 (1.3.12, 1.2.7)
$time_local:服务器时间(LOG Format 格式) (1.3.12, 1.2.7)
$uri:请求中的当前URI(不带请求参数,参数位于$args),可以不同于浏览器传递的$request_uri的值,它可以通过内部重定向,或者使用index指令进行修改,$uri不包含主机名,如”/foo/bar.html”。
大型站点高并发架构技术
Nginx配置文件nginx.conf详细说明文档
关于PHP高并发抢购系统设计
Mysql常用的锁机制
Sping基础
Reliable Master持续集成环境搭建Centos
Win7 macaca自动化环境搭建 PC篇
安卓appium无线调试
Selenium PageFactory使用
- 最新文章
-
Spring Cloud Gateway内置GatewayFilter工厂类 (二)
Spring Cloud Gateway内置GatewayFilter工厂类 (一)
Spring Cloud Gateway 内置的路由断言工厂类
Spring Cloud Gateay工作原理
Spring Cloud Gateway 术语约定
如何在项目中引入Spring Cloud Gateway
HttpClient 连接池配置和使用
Unable to start ServletWebServerApplicationContext due to missing ServletWebServerFactory bean
maven testng 运行指定的suite.xml
log4j2 日志打两遍的问题