nginx for windows
一.介绍安装
公司由于linux云服务器还没批下来,暂时先在windows服务器上测试。windows版nginx使用本地win32 api(而非cygwin仿真层)。当前仅使用select()和poll()(1.15.9)连接处理方法(事件驱动模型),因此不应期望高性能和可伸缩性(在linux上支持epoll,它是性能最高的一种)。由于这个原因和其他一些已知问题,适用于windows的nginx版本被认为是beta版本。目前,除了xslt过滤器,图像过滤器,geoip模块和嵌入式perl语言之外,它提供的功能几乎与unix版本的nginx相同。
1.1下载安装
windows下载安装包1.17.7
启动nginx, 没有找到nginx.exe进程,
c:\users\administrator>cd c:\nginx-1.17.7 c:\nginx-1.17.7>start nginx
查看日志c:\nginx-1.17.7\logs
2020/01/03 13:55:53 [emerg] 11992#35328: 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)
1.2 查看谁占用了80端口
c:\nginx-1.17.7>netstat -ano|findstr "80"
tcp 0.0.0.0:80 0.0.0.0:0 listening 4
可能是http,查看下http服务状态:
c:\nginx-1.17.7>netsh http show servicestate
发现6468占用了,再查看任务管理器,是iis占用了,如下所示:
1.3 解决windows 80端口被iis占用
方法1,启动栏输入regedit
hkey_local_machine\system\currentcontrolset\services\http
将start 的3改为0
重启服务器,
方法2:直接关闭iis中的默认站点 default web site
再次启动 查看进程状态 tasklist /fi "imagename eq nginx.exe"
一个是主进程(守护进程),另一个工作进程
访问,查看nginx首页
1.4 nginx 命令管理
nginx -s stop 快速结束服务
nginx -s quit 正常结束服务
nginx -s reload 更改配置,使用新配置启动新工作进程,正常关闭旧工作进程
nginx -s reopen 重新打开日志文件
nginx/win32是运行在一个控制台程序,而非windows服务方式的。
1.5其它事项
日志文件,如果是debug级别,日志文件会增长的比较快。需要更大的磁盘目录空间。
二. windows下nginx.conf配置示例
#默认所有用户都能启动nginx进程 #user nobody; #worker进程数,配置对应cpu核心数 worker_processes 1; #服务器错误日志 #error_log logs/error.log; #error_log logs/error.log notice; #error_log logs/error.log info; #主进程,也叫守护进程pid存放路径 #pid logs/nginx.pid; #有默认的事件驱动模型 events { #每个worker进程的最大连接数 worker_connections 1024; accept_mutex on; #默认为on,解决"惊群"问题 } http { #识别web资源类型,引入外部 mime.types文件,路径在conf/mime.types下 include mime.types; #默认资源类型 default_type application/octet-stream; #自定义服务日志,这里记录前端请求的日志,而不是全局中nginx进程运行的常规日志 log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; #访问日志,main是log_format格式字符串 #access_log logs/access.log main; #方式转输方式,转输的数据最大量不能超过sendfile_max_chunk 128k sendfile on; #tcp_nopush on; #设置格式 charset utf-8; #配置连接超时时间 #keepalive_timeout 0; keepalive_timeout 65; #默认开启gzip压缩 #gzip on; # 缓存设置,基于proxy_cache机制 #path缓存目录 #levels相对于path指定目录的第几级hash目录中缓存数据文件,目录层级2级, #keys_zone索引内存区域名称 10m是大小 #max_size硬盘中缓存数据的大小限制(超过启动nginx自己的淘汰规则), #inactive在60分钟的时间内没有被访问就会被清理,存放临时文件 #use_temp_path 关闭 proxy_cache_path cache levels=1:2 keys_zone=abc_cache:10m max_size=5g inactive=60m use_temp_path=off; # http server 监听 www.abc.com server { listen 80; #监听端口 server_name www.abc.com; #创建独立的日志,重点:手动在logs下创建www.abc.com文件夹 access_log logs/www.abc.com/access.log; error_log logs/www.abc.com/error.log; #charset koi8-r; location / { #root html; #index index.html index.htm; #缓存设置 proxy_cache abc_cache; proxy_cache_methods get head post; proxy_cache_valid 200 304 60m; #200和304头信息过期时间 proxy_cache_valid 404 1m; proxy_cache_valid any 10m; #其他过期时间10分钟 expires 2h; proxy_pass http://abcservers; } location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|js|css)$ { #目录是本机web服务器静态资源目录 root d:\\www\www.abc.com\wwwroot; index index.html index.htm; } error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } } # https server 监听apicms.abc.com端口 server { listen 443 ssl; server_name apicms.abc.com; #创建独立的日志,重点:手动在logs下创建apicms.abc.com文件夹 access_log logs/apicms.abc.com/access.log; error_log logs/apicms.abc.com/error.log; ssl_certificate ./ssl/apicms.abc.com.crt; ssl_certificate_key ./ssl/apicms.abc.com.rsa; ssl_session_cache shared:ssl:1m; ssl_session_timeout 5m; ssl_ciphers high:!anull:!md5; ssl_prefer_server_ciphers on; location / { root html; index index.html index.htm; proxy_pass https://apicmsservers; proxy_set_header connection keep-alive; proxy_set_header host $host; #web服务器端获得用户的真实ip request.getattribute("x-real-ip") proxy_set_header x-real-ip $remote_addr; proxy_set_header x-real-port $remote_port; proxy_set_header x-forwarded-for $proxy_add_x_forwarded_for; } } #apicms后端服务器组,如果一个服务器处理请求出错,会顺次交给组内下一个服务器进行处理,以此类推 upstream apicmsservers{ #当某个server请求二次失败后,10分钟以不会把请求发往已检查出标记为不可用的服务器 server 127.0.0.1:44301 max_fails=2 fail_timeout=600s weight=5; server 192.168.0.125:44301 max_fails=2 fail_timeout=600s weight=5; } #官网后端服务器组 upstream abcservers{ server 127.0.0.1:8081 max_fails=2 fail_timeout=600s weight=5; server 192.168.0.125:8081 max_fails=2 fail_timeout=600s weight=5; } }
(1) https协议需要证书, 将申请的.pfx证书使用openssl工具,将转换成crt和rsa文件。再放在nginx目录的ssl文件夹下,转换示例如下:
openssl >pkcs12 -in d:\ssl\1717704_apicms.abc.com.pfx -clcerts -nokeys -out d:\ssl\apicms.abc.com.crt
openssl >pkcs12 -in d:\ssl\1717704_apicms.abc.com.pfx -nocerts -nodes -out d:\ssl\apicms.abc.com.rsa
(2)配置中所有相对路径,都是nginx目录下的。 比如:logs/ , proxy_cache_path cache , ./ssl
(3) 如果没有购买域名绑定当前nginx服务器ip, 那么测试需要在nginx服务器上使用hosts文件。才能监听server块的虚拟主机名,hosts绑定如下所示:
127.0.0.1 apicms.abc.com
127.0.0.1 www.abc.com
再ping下确认,hosts文件是否生效
参考资料
推荐阅读
-
在Windows下使用XAMPP搭建简易WebDAV服务器的教程
-
微软Windows 10X细节:全新系统、体验更流畅
-
给苹果装Windows 教你做苹果电脑双系统:看完自己随便装
-
IE存在严重漏洞:微软停止Windows 7等系统安全更新
-
微软宣布Windows 10 v1809于今年5月12放弃!
-
Windows 10X支持32位应用 微软给出苛刻条件
-
微软已开始测试Windows 10彩色新图标:就是这样
-
Windows 10补丁又出问题:会卡更新 并导致重置功能失效
-
Windows 10补丁又双叒出问题 惠普用户卡在开机界面
-
微软扩大Windows 10在线帐户推广:先是美国 现在是德国