因为要在自己电脑(windows)上搭建一个流媒体服务器,使用nginx-rtmt搭建。所以得先在本地搭建nginx服务。 参考了nginx的官方文档,整理了一些遇到的问题,顺便翻译了一下nginx的windows版本的安装文档。
原文链接: http://nginx.org/en/docs/windows.html
Windows版本的nginx用的是 win32的api(不是使用Cygwin中间层). 目前只使用了 select()连接处理方法。 所以不用期望高性能和高扩展性。由于这个原因和一些已知问题,windows版本的nginx是考虑作为一个beta版本。 到现在为止,它提供了几乎和UNIX版本同样的功能,除了XSLT过滤器,图片过滤器,GeoIP模块和嵌入式Perl语言。
安装windows版本的nginx,首先下载nginx最新的版本(1.13.0),因为这个主分支的nginx版本修复了所有的已知问题。然后解压这个文件,然后切换到nginx-1.13.0目录下, 然后运行 nginx.ext(双击),例下:
cd c:\
unzip nginx-1.13.0.zip
cd nginx-1.13.0
start nginx
运行 tasklist命令,来查看nginx 进程
C:\nginx-1.13.0>tasklist /fi "imagename eq nginx.exe"
Image Name PID Session Name Session# Mem Usage
=============== ======== ============== ========== ============
nginx.exe 652 Console 0 2 780 K
nginx.exe 1332 Console 0 3 112 K
这两个进程中一个是主进程,一个是工作进程。如果nginx没有启动,可以到logs/error.log下面去找原因。 如果这log 文件没有生成,问题的原因可能是报告在window的Event log里面了。 如果输入命令出现的是一个错误页面,同样的去logs/error.log下面去找原因。
在我的电脑运行nginx.exe,然后在命令行输入tasklist 命令报错,我在logs/error.log下面找到这个日志。 这表示启动服务器时绑定80端口报错。
2017/05/24 10:24:15 [emerg] 7008#13824: bind() to 0.0.0.0:80 failed (10013: An attempt was made to access a socket in a way forbidden by its access permissions)
解决方案是:修改绑定的端口,找到conf/nginx.conf文件修改绑定的端口。
server {
listen 80; ///修改这个端口为8087,这个端口可以任意指定,只要没有被绑定过。
server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
root html;
index index.html index.htm;
}
....
然后重新运行nginx.exe,在浏览器输入 http://localhost:8087(8087为你刚才指定的端口),出现这个页面表示你本地的nginx服务安装成功了。
windows版本的nginx用当前运行目录作为默认的配置的文件的前缀。例如上面的那个例子: 前缀为*C:\nginx-1.13.0* 。配置文件中的路径必须用UNIX风格的斜杠指定。
access_log logs/site.log;
root C:/web/html;
windows版本的nginx是作为一个标准的控制台应用运行的(不是一个服务)。他们用下面这些命令去管理:
nginx -s stop 快速关闭
nginx -s quit 正常关闭
nginx -s 修改配置文件后,重新打开一个新的工作进程并正常关闭之前的工作
nginx -s reopen 重新打开log文件
已知问题
- 虽然可以同时启动多个工作进程,但是只有一个工作进程在真正处理所有的工作。
- 一个工作进程不能同时处理超过1024个连接
- 不支持UDP代理功能
未来可能的改进
- 作为一个服务运行
- 使用新完成的的I/O接口作为连接进程方法
- 一个工作进程里面使用多个线程