windows下安装nginx并配置端口转发 + 负载均衡,使用80端口转发多个本机的虚拟域名 | 您所在的位置:网站首页 › 端口设置命令 › windows下安装nginx并配置端口转发 + 负载均衡,使用80端口转发多个本机的虚拟域名 |
下载nginx
nginx下载地址:http://nginx.org/en/download.html 当前最新版本为nginx-1.20.0 启动nginx 下后nginx后解压【nginx-1.20.0.zip】到你指定的目录。 打开cmd命令行窗口,进入nginx解压目录,在cmd窗口中输入【nginx.exe】或【start nginx】命令启动nginx,推荐在用【start nginx】命令,因为它是后台启动方式。 在浏览器地址栏中输入localhost:80查看nginx启动效果: 看到这个页面说明nginx已经启动成功。 这个时候可以关掉cmd窗口,nginx仍然在运行状态,不会退出。
也可以在cmd窗口中输入命令【tasklist /fi "imagename eq nginx.exe" 】,查看启动状态。
如果启动报错,是80端口被其它应用程序占用了,此是要关闭其它应用程序,把80端口让出来,然后征新启动nginx 。 nginx: [emerg] 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) 检查80端口是否被占用的命令是:【 netstat -ano | findstr 0.0.0.0:80 】,或 【netstat -ano | findstr "80"】。 配置本机域名要通过域名访问网站,生产环境必须申请域名,然后把域名指向外网服务器的ip。 但是在开发环境,而且是在内网,申请域名也不好使,那么如何在内网环境使用域名访问呢? 解决办法是,修改hosts配置文件, 用文本编辑器打开 C:\Windows\System32\drivers\etc\hosts 文件,添加两个域名指向本机127.0.0.1的域名, #在本机的hosts文件配置 127.0.0.1 local-crm.021sports.com 127.0.0.1 local-mall.021sports.com
如果要添加访问内网其它服务器的域名,就将其它服务器的ip替换127.0.0.1(比如10.10.61.169),同时,10.10.61.169这台服务器也要配置hosts, #在本机的hosts文件配置 10.10.61.169 dev-crm.021sports.com 10.10.61.169 dev-mall.021sports.com(本机的hosts配置)
如果要在本机可以访问内网10.10.61.169这台服务器的两个域名dev-crm.021sports.com及dev-mall.021sports.com,那么同时需要配置10.10.61.169服务器的hosts, #同时必须在10.10.61.169服务器的hosts文件里配置 127.0.0.1 dev-crm.021sports.com 127.0.0.1 dev-mall.021sports.com(10.10.61.169服务器的hosts配置)
配置完成后,在本机就可以同时访问四个域名了。 配置反向代理端口转发 + 负载均衡 nginx的配置文件是 conf/nginx.config 。 现在,我们要配置两个域名转发, 第一个域名 local-crm.021sports.com 转发到本机的 http:/、127.0.0.115900 站点, 第二个域名 local-mall.021sports.com 转到发本机的 http://127.0.0.1:55888 站点, 域名local-crm.021sports.com与域名local-mall.021sports.com是没带端口号的,表示默认用 80端口。 步骤: (1)添加两个server配置 在http{}节点中,添加两个server配置,分别对应两个域名。 server { listen 80; server_name local-crm.021sports.com; location / { proxy_pass http://local-crm; } } server { listen 80; server_name local-mall.021sports.com; location / { proxy_pass http://local-mall; } }listen:对外访问的端口。 server_name:对外访问的域名。 proxy_pass:转发的请求地址,可以是静态域名,也可以是变量。
(2) 添加两个upstream节点 然后,在http{}节点中,添加两个upstream配置,对应负载均衡。 upstream local-crm { server 127.0.0.1:15900 weight=1; server 127.0.0.1:15900 weight=1; server 127.0.0.1:15900 weight=1; } upstream local-mall { server 127.0.0.1:55888 weight=1; server 127.0.0.1:55888 weight=1; server 127.0.0.1:55888 weight=1; }server:负载均衡节点,有几个节点就添加几个。 weight:权重 注意:本地站点host必须使用127.0.0.1,而不能使用localhost,因为windows 10系统,在cmd窗口ping localhost,它的ip不是127.0.0.1,而是IPV6地址::1,所以nginx找不到这个主机,会报Invalid Hostname的错误。
那么在浏览器中访问local-mall.021sports.com,或访问local-crm.021sports.com域名的的时候,会报Invalid Hostname的错误。
(3) 整体配置是: http { server_names_hash_bucket_size 128; upstream local-crm { server 127.0.0.1:15900 weight=1; server 127.0.0.1:15900 weight=1; server 127.0.0.1:15900 weight=1; } upstream local-mall { server 127.0.0.1:55888 weight=1; server 127.0.0.1:55888 weight=1; server 127.0.0.1:55888 weight=1; } server { listen 80; server_name local-crm.021sports.com; location / { # 如果不用负载, 直接写域名 proxy_pass http://127.0.0.1:15900; proxy_pass http://local-crm; proxy_set_header Host $http_host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-NginX-Proxy true; } } server { listen 80; server_name local-mall.021sports.com; location / { # 如果不用负载, 直接写域名 proxy_pass http://127.0.0.1:55888; proxy_pass http://local-mall; proxy_set_header Host $http_host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-NginX-Proxy true; } } }
然后在cmd命令窗口中输入【nginx -s reload】重载配置文件。 如果执行nginx -s reload命令后,输出如下错误信息: nginx: [emerg] could not build server_names_hash, you should increase server_names_hash_bucket_size: 32 这段提示信息是说需要增加服务器名字哈希别名的大小。如何解决呢, 在配置文件【conf/nginx.config】的http{}段增加一行配置 server_names_hash_bucket_size 64; 如果64还不够,那么就按32的倍数往上加。 http { server_names_hash_bucket_size 64; ..... }注意:数值必须是32的倍数。 再次执行命令【nginx -s reload】 nginx命令介绍 【查看nginx是否启动】 tasklist /fi "imagename eq nginx.exe"
【启动nginx】 start nginx nginx.exe
【停止nginx】 从容停止服务(此命令不一定能杀死nginx进程)这种方法较stop相比就比较温和一些了,需要进程完成当前工作后再停止。nginx -s quit
立即停止服务(此命令不一定能杀死nginx进程)这种方法比较强硬,无论进程是否在工作,都直接停止进程。nginx -s stop
使用taskkill命令杀死nginx进程(此命令管用,可以杀死nginx) taskkill /f /t /im nginx.exe
【重新加载配置】nginx -s reload
【Linux命令】 启动nginx systemctl start nginx.service systemctl 停止systemctl stop nginx.service
重启nginxsystemctl restart nginx.service
查看端口号netstat -tlnp | grep nginx
|
CopyRight 2018-2019 实验室设备网 版权所有 |