Windows下安装Nginx及负载均衡
1.下载Windows版本的Nginx
http://nginx.org/en/download.html
2.解压Nginx包,配置conf文件下的nginx.conf文件
3.配置说明:
#user nobody; #N工作进程数,默认为1 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 process进程的最大并发链接数,默认1024,可以按照最大客户端连接数max_clients配置 #nginx作为http服务器的时候: #max_clients = worker_processes * worker_connections #nginx作为反向代理服务器的时候: #max_clients = worker_processes * worker_connections/4 worker_connections 1024; } #http服务器配置,做web服务器或反向代理 http { include mime.types;#文件扩展名与类型映射表 default_type application/octet-stream;#默认文件类型 #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; sendfile on;#开启高效传输模式 #在nginx中,tcp_nopush配置与tcp_nodelay“互斥”。它可以配置一次发送数据包的大小。 #也就是说,数据包累积到一定大小后就发送。 #在nginx中tcp_nopush必须和sendfile配合使用。 #tcp_nopush on; #连接超时时间 单位是秒 #keepalive_timeout 0; keepalive_timeout 65; #启用gzip压缩 #gzip on; upstream web70{ #有域名的可以用域名 #负载的一个实例,可以是外网IP #默认轮询,把每个请求按顺序逐一分配到不同的server,如果server挂掉,能自动剔除。 #其他配置: #1.在负载的实例后面加weigth参数,表示权值,权值越高被分配到的几率越大 #譬如server 127.0.0.1:71 weight=1; #2.把请求分配到连接数最少的server #least_conn; #3.每个请求会按照访问ip的hash值分配,这样同一客户端连续的Web请求都会被分发到同一server进行处理 #可以解决session的问题。如果server挂掉,能自动剔除。 #ip_hash; server 127.0.0.1:71; #weight=1; server 127.0.0.1:72; #weight=1; } #对外web服务器实例 server { listen 70;#监听端口 server_name localhost;#服务器名,默认localhost #默认字符编码,默认koi8-r,可改为utf-8 #charset koi8-r; charset utf-8; #本服务器实例日志路径 #access_log logs/host.access.log main; #默认请求配置 location / { root html;#web服务器根目录,用来放网站程序的目录 index index.html index.htm;#默认首页 proxy_pass http://web70; #请求转向的url地址,反向代理则填写对应upstream后面的域名 proxy_redirect default; } #错误页面 #error_page 404 /404.html; # redirect server error pages to the static page /50x.html # error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } # proxy the PHP scripts to Apache listening on 127.0.0.1:80 # #location ~ \.php$ { # proxy_pass http://127.0.0.1; #} # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000 # #location ~ \.php$ { # root html; # fastcgi_pass 127.0.0.1:9000; # fastcgi_index index.php; # fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name; # include fastcgi_params; #} # deny access to .htaccess files, if Apache's document root # concurs with nginx's one # #location ~ /\.ht { # deny all; #} } # another virtual host using mix of IP-, name-, and port-based configuration # #server { # listen 8000; # listen somename:8080; # server_name somename alias another.alias; # location / { # root html; # index index.html index.htm; # } #} # HTTPS server # #server { # listen 443 ssl; # server_name localhost; # ssl_certificate cert.pem; # ssl_certificate_key cert.key; # 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; # } #} }
4.打开控制台进入Nginx目录,输入nginx.exe命令来启动Nginx
nginx.exe
或start nginx.exe
start nginx.exe
5.打开任务管理器可以看到Nginx已经在运行了,此时控制台也可以关闭了
6.配置负载均衡web实例
7.然后刷新Nginx的服务器,显示第一个负载的web实例
8.再刷新下,显示第二个负载的web实例
Nginx其他命令:
nginx.exe -s stop //停止nginx nginx.exe -s reload //重新加载nginx nginx.exe -s quit //退出nginx
如出现如下错误则有可能是保存的编码有问题,需要保存位UTF-8(不带BOM):
nginx: [emerg] unknown directive "锘? in D:\nginx-1.17.6/conf/nginx.conf:4
使用VS Code打开,点击下面的UTF-8 with BOM
通过编码保存
选择UTF-8
一个端口配置多个域名:
#80端口配置多个域名 server { listen 80;#监听端口 server_name localhost www.aaa.com www.bbb.com;#服务器名,默认localhost #默认字符编码,默认koi8-r,可改为utf-8 #charset koi8-r; charset utf-8; #本服务器实例日志路径 #access_log logs/host.access.log main; #默认请求配置 location / { root html;#web服务器根目录,用来放网站程序的目录 index index.html index.htm;#默认首页 proxy_pass http://OpenApiServer10020; #请求转向的url地址,反向代理则填写对应upstream后面的域名 proxy_redirect default; } error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } }
如Windows服务器上的IIS已绑定域名(80端口已被IIS占用)则nginx监听的80端口绑定域名无法访问,只能通过监听其他端口,譬如8080,那对应的域名则也需要加上端口,如www.aaa.com:8080
要解决这个问题有两种方案,一种是使用IIS做反向代理映射到nginx负载的端口来绑定域名,一种则是全部停用IIS绑定域名,只使用nginx做域名绑定。