Nginx 反向代理服务器 学习记录
Nginx简介
Nginx (engine x) 是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP服务器。Nginx是由伊戈尔·赛索耶夫为俄罗斯访问量第二的Rambler.ru站点(俄文:Рамблер)开发的,第一个公开版本0.1.0发布于2004年10月4日。
Nginx特点:
1、跨平台:Nginx可以在大多数Unix like os 编译运行,而且也有Windows移植版本。
2、配置异常简单,非常容易上手,配置风格跟程序开发一样,神一样的配置。
3、非阻塞、高并发链接:数据复制时,磁盘I/O的第一阶段是非阻塞的。官方测试能够支撑5万并发链接,在实际生产环境中跑到2~3万并发连接数。(这得益于Nginx使用了最新的epoll模型)。
4、事件驱动:通信机制采用epoll模型,支持最大并发链接。
5、master/worker结构:一个master进程生成一个或者多个worker进程
6、内存消耗小:处理大并发请求内存消耗非常小。在3万并发链接下,开启10个Nginx进程才消耗150M内存(15M*10=150M);
7、成本低廉:Nginx为开源软件,可以免费使用,
8、内置的健康检查功能:如果Nginx Proxy后端的某台web服务器宕机了,不会影响前端访问。
9、节省带宽:支持GIZP压缩,可以添加浏览器本地缓存的header头。
10、稳定性高:用于反向代理,宕机的几率微乎其微。
Nginx的内部(进程)模型
Nginx的应用:
1、到官网下载Windows版本,下载地址http://nginx.org/en/download.html
2、解压到磁盘任一目录下
3、修改配置文件:具体参考备注
4、启动服务,打开cmd指令窗口,指向解压目录,输入指令:start nginx.exe
5、停止服务:nginx -s stop
6、重新加载配置(当配置文件修改后都需要执行一次):nginx -s reload
Nginx配置:
#user nobody; #用来指定nginx worker进程运行用户以及用户组,默认nobody账号运行 worker_processes 1; #工作进程的个数,可以配置多个,建议与cpu核数一致 #error_log logs/error.log notice; #定义错误日志文件的位置及输出级别【debug / info / notice / warn / error / crit】 #pid logs/nginx.pid; #用来指定进程id的存储文件的位置 events { worker_connections 1024; #单个进程最大连接数(最大连接数=连接数*进程数) } http { sendfile on; #配置on让sendfile发挥作用,将文件的回写过程交给数据缓冲去去完成,而不是放在应用中完成,这样的话在性能提升有有好处 #tcp_nopush on; #让nginx在一个数据包中发送所有的头文件,而不是一个一个单独发 include mime.types; #文件扩展名与文件类型映射表 default_type application/octet-stream; #指定默认处理的文件类型可以是二进制 #client_header_timeout 10; #设置请求头的超时时间 #client_body_timeout 10; #设置请求体的超时时间 #send_timeout 10; #指定客户端响应超时时间,如果客户端两次操作间隔超过这个时间,服务器就会关闭这个链接 #日志格式 名称 #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; #设置存储访问记录的日志 #error_log logs/error.log main; #设置存储记录错误发生的日志 keepalive_timeout 65; #给客户端分配连接超时时间,服务器会在这个时间过后关闭连接。一般设置时间较短,可以让nginx工作持续性更好 gzip on; #是告诉nginx采用gzip压缩的形式发送数据。这将会减少我们发送的数据量。 #gzip_proxied any; #允许或者禁止压缩基于请求和响应的响应流。我们设置为any,意味着将会压缩所有的请求。 gzip_min_length 1000; #设置对数据启用压缩的最少字节数。如果一个请求小于1000字节,我们最好不要压缩它,因为压缩这些小的数据会降低处理此请求的所有进程的速度。 gzip_comp_level 4; #设置数据的压缩等级。这个等级可以是1-9之间的任意数值,9是最慢但是压缩比最大的。我们设置为4,这是一个比较折中的设置。 #服务器集群配置 upstream linuxidc { #服务器集群名字 server 10.1.2.122:8081 weight=1; #服务器配置 weight是权重的意思,权重越大,分配的概率越高 server 10.1.2.96:8082 weight=2; server 10.1.2.91:8080 weight=2; } server { listen 8090; #端口号 server_name localhost; #指定ip地址或者域名,多个配置之间用空格分隔 #charset koi8-r; #用于设置www/路径中配置的网页的默认编码格式 #access_log logs/host.access.log main; #用于指定该虚拟主机服务器中的访问记录日志存放路径 location / { root html; #用于指定访问根目录时,访问虚拟主机的web目录 index index.html index.htm; #在不指定访问具体资源时,默认展示的资源文件列表 proxy_pass http://linuxidc; #请求转向linuxidc定义的服务器列表 } #error_page 404 /404.html; # 将服务器错误页重定向到 /50x.html # error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } } }
Nginx基本配置参数说明:http://www.nginx.cn/76.html
想要记录更详细的信息需要自己设置log_format,具体可设置的参数格式及说明如下:
参数 | 说明 | 示例 |
$remote_addr | 客户端地址 | 211.28.65.253 |
$remote_user | 客户端用户名称 | -- |
$time_local | 访问时间和时区 | 18/Jul/2012:17:00:01 +0800 |
$request | 请求的URI和HTTP协议 | "GET /article-10000.html HTTP/1.1" |
$http_host | 请求地址,即浏览器中你输入的地址(IP或域名) | www.it300.com 192.168.100.100 |
$status | HTTP请求状态 | 200 |
$upstream_status | upstream状态 | 200 |
$body_bytes_sent | 发送给客户端文件内容大小 | 1547 |
$http_referer | url跳转来源 | https://www.baidu.com/ |
$http_user_agent | 用户终端浏览器等信息 | "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; SV1; GTB7.0; .NET4.0C; |
$ssl_protocol | SSL协议版本 | TLSv1 |
$ssl_cipher | 交换数据中的算法 | RC4-SHA |
$upstream_addr | 后台upstream的地址,即真正提供服务的主机地址 | 10.10.10.100:80 |
$request_time | 整个请求的总时间 | 0.205 |
$upstream_response_time | 请求过程中,upstream响应时间 | 0.002 |
然后就可以访问Nginx服务了,从下面图片可以看出,两次请求被分发到两个网站上
安装服务
1、下载服务安装软件 链接:https://pan.baidu.com/s/1o7BENge 密码:slfz,并将其复制到你的Nginx目录下,重命名(名字任意)
2、新建一个xml文件
<?xml version="1.0" encoding="utf-8" ?> <service> <id>nginx</id> <name>nginx</name> <description>nginx</description> <logpath>D:\nginx-1.4.7\</logpath> <logmode>roll</logmode> <depend></depend> <executable>D:\nginx-1.4.7\nginx.exe</executable> <stopexecutable>D:\nginx-1.4.7\nginx.exe -s stop</stopexecutable> </service>
3、以管理员身份运行cmd,并定位到nginx目录下,运行指令:mynginx.exe install
运行成功后,以后每次启动和停止服务都可以 使用命令,简单快捷
启动nginx :net start nginx
停止nginx:net stop nginx
参考网址:https://www.cnblogs.com/zhouxinfei/p/7862285.html
以下总结Nginx启动或重启失败的原因,以及解决办法
-
因为配置文件出错了:
我们可以使用nginx -t方法查看配置文件出错的地方。
也可以通过查看Nginx日志文件定位到Nginx重启失败的原因,Nginx日志文件的路径一般在:/var/log/nginx目录下
-
端口被占用:
这时,我们需要查看是哪个程序占用了它,可能是IIS的某个站点,或者Tomat,Apache等,都有可能,所以,我们需要查看一下电脑端口的使用情况(以80端口举例),使用下面命令:
netstat -aon|findstr “:80″
追记:
出现执行net stop nginx命令后访问监听地址发现还可以正常访问或者修改配置文件后没有生效,排除配置错误的问题,很有可能是之前启动的nginx进程未完全退出,
可以输入taskkill /fi "imagename eq nginx.EXE" /f,可以杀死名字为nginx.EXE的所有进程后,再次运行nginx就好了
检查nginx配置是否正确,可以在nginx.exe文件下执行命令 nginx -t查看