windows下nginx配合nodejs进行反向代理
本文原创,转载请附上原作者链接!https://www.cnblogs.com/LSWu/articles/14848324.html
1.安装node.js
从node.js官网上下载node.js的LTS安装包,然后正常安装即可,安装完成后,node.js自带的npm工具也会相应的安装好。然后在命令行下输入node -v和npm -v,返回如下信息说明安装成功。
1 lishanwu@Lenovo-PC MINGW64 ~/Desktop/nodejs_test
2 $ node -v
3 v14.16.1
4
5 lishanwu@Lenovo-PC MINGW64 ~/Desktop/nodejs_test
6 $ npm -v
7 6.14.12
2.安装nginx服务器
从nginx官网上下载对应windows的LTS的nginx压缩包,然后解压到目标目录即可,然后双击ngnix.exe,或者在当前目录下打开命令行,输入nginx.exe ,即可启动nginx服务器。然后在浏览器上输入localhost,看到如下画面则认为nginx已经安装完成。如果想关闭nginx,则在命令行下输入nginx -s stop即可关闭nginx服务器,重启服务器则使用nginx -s reload

注意如果在git下,则使用./nginx.exe来启动服务器,使用./nginx.exe -s stop来停止服务器,使用./nginx.exe -s reload来重启服务器。
3.配置nginx进行反代理
nginx的解压后有一个conf目录,下面存放着很多匹配文件,想要让nginx进行反代理服务,需要对nginx.conf文件进行配置。修改nginx.conf文件如下所示
#user nobody;
worker_processes 1; #error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info; #pid logs/nginx.pid; events {
worker_connections 1024;
} 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;
#tcp_nopush on; #keepalive_timeout 0;
keepalive_timeout 65; #gzip on; server {
listen 80;
server_name localhost; #charset koi8-r; #access_log logs/host.access.log main; #这里简单设置一下反向代理
location /api/ {
proxy_pass http://192.168.x.xxx:4000; #我的本机ipv4地址,最好不要用localhost或者127.0.0.1,血的教训<-_->
}
#我的nodejs所在主机的ip为192.168.xxx.x:4000
#我的nginx所在主机的ip为192.168.xxx.x,将这里改为自己的本机ip,我不想被网络攻击,所以不能贴出我的ip
location / {
root html;
index index.html index.htm;
} #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;
# }
#} }
然后重启nginx服务器,注意在进程管理器中确保在重启前关闭nginx的进程,然后再启动nginx服务器。
4.编写nodejs后端的测试代码,然后启动nodejs服务
main.js如下所示
var express = require('express');
var app = express();
var fs = require("fs");
app.get('/api/test0', function (req, res) {
console.log(req.url);
res.setHeader("Content-Type", "text/html;charset=utf-8")
res.end( "<h2>accessed test0</h2>" );
})
app.get('/api/test1', function (req, res) {
res.setHeader("Content-Type", "text/html;charset=utf-8")
res.end( "<h2>accessed test1</h2>" );
})
app.get('/api/test1/setting', function (req, res) {
res.setHeader("Content-Type", "text/html;charset=utf-8")
res.end( "<h2>this is setting of test1</h2>" );
})
var server = app.listen(4000, function () {
var host = server.address().address
var port = server.address().port
console.log("应用实例,访问地址为 http://%s:%s", host, port)
})
启动nodejs前需要下载express依赖包,使用npm install --save express,然后node main.js启动nodejs服务(注意不要关了,否则nginx无法访问)。
5.测试
在浏览器中输入http://localhost/api/test0 ,可以看到如下所示的结果,说明通过nginx反代理成功访问到nodejs,注意这里没有加端口号,默认通过80端口访问nginx。

然后在浏览器中输入http://localhost/api/test1 ,可以看到如下所示结果

接着再输入http://localhost/api/test1/setting,可以看到如下结果

从上面可以看到,通过访问不同的url可以将其通过nginx反向代理到nodejs中,nodejs并将处理的结果返回给nginx,然后nginx再将结果返回个浏览器。方向代理有一个很大的好处就是可以实现负载均衡和跨域访问。
6.总结
在使用nginx进行反代理的时候很容易将其反代理的ip或域名设为127.0.0.1或localhost,经过多次试验发现,当设置为localhost后,需要刷新页面两次才有返回结果,这显然不正常,而使用127.0.0.1后,有多次直接返回404,所以为了确保每次都能正常访问,最好将nginx的反代理的ip设为本机ip,例如192.168.xxx.x,域名则设置为备案后的域名(大陆),对于本机,在windows下使用ipconfig命令查看ip地址,linux下使用ifconfig查看ip地址。网上的教程大多都是直接设置localhost或者127.0.0.1,笔者强烈建议将其设置为本机ip。
windows下nginx配合nodejs进行反向代理的更多相关文章
- [转]Windows 下 Nginx+IIS 使用
本文转自:https://blog.csdn.net/chihen/article/details/52698594 Windows 下 Nginx+IIS 使用 一.Nginx简介 Nginx (& ...
- Windows下Nginx实现负载均衡
Apache,Nginx Apache和Nginx都属于属于 静态页面服务器,都有插件支持动态编程语言处理,但Nginx的IO模比Apache更适合跑代理.所以一般都作为前端缓冲代理(Nginx的反向 ...
- Nginx插件之openresty反向代理和日志滚动配置案例
Nginx插件之openresty反向代理和日志滚动配置案例 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.openresty介绍 1>.Nginx介绍 Nginx是一款 ...
- 基于nginx + lua实现的反向代理动态更新
大家都知道,nginx是当前应用非常广泛的web服务器,热度因为他的高并发高性能高可靠性,且轻量级!牛逼的不行,不多说这些. 今天要介绍的是,如何基于nginx和lua脚本,也就是在openresty ...
- 【架构师之路】Nginx负载均衡与反向代理—《亿级流量网站架构核心技术》
本篇摘自<亿级流量网站架构核心技术>第二章 Nginx负载均衡与反向代理 部分内容. 当我们的应用单实例不能支撑用户请求时,此时就需要扩容,从一台服务器扩容到两台.几十台.几百台.然而,用 ...
- nginx基于TCP的反向代理
一.4层的负载均衡 Nginx Plus的商业授权版开始具有TCP负载均衡的功能.从Nginx 1.7.7版本开始加入的,现在变成了一个商业收费版本,想要试用,需要在官网申请.也就是说,Nginx除了 ...
- (Nginx+Apache)实现反向代理与负载均衡
反向代理负载均衡 使用代理服务器可以将请求转发给内部的Web服务器,使用这种加速模式显然可以提升静态网页的访问速度.因此也可以考虑使用这种技术,让代理服务器将请求均匀转发给多台内部Web服务器之一上, ...
- Nginx总结(五)如何配置nginx和tomcat实现反向代理
前面讲了如何配置Nginx虚拟主机,大家可以去这里看看nginx系列文章:https://www.cnblogs.com/zhangweizhong/category/1529997.html 今天要 ...
- 如何配置nginx和tomcat实现反向代理?
什么是反向代理 通常的代理服务器,只用于代理内部网络对Internet的连接请求,客户机必须指定代理服务器,并将本来要直接发送到Web服务器上的http请求发送到代理服务器中由代理服务 ...
随机推荐
- Day07_34_集合概述
集合概述 * 主要集合概述 - 集合相当于现实世界中的容器,主要包含两种存放模式,一个一个的存(Collection), 一对一对存(Map[key,value]) - 集合中只能存储引用数据类型,不 ...
- Day11_50_SortedMap集合
SortedMap集合 二叉查找树 和 二叉*衡树 二叉查找树是一种有序的树,所有的左孩子的value值都是小于叶子结点的value值的,所有右孩子的value值都是大于叶子结点的.这样做的好处在于: ...
- k8s kubernetes 集群 证书更新操作
转载自https://www.cnblogs.com/kuku0223/p/12978716.html 1. 各个证书过期时间 /etc/kubernetes/pki/apiserver.crt #1 ...
- 【C++】从零开始,只使用FFmpeg,Win32 API,实现一个播放器(一)
前言 起初只是想做一个直接读取视频文件然后播放字符动画的程序.我的设想很简单,只要有现成的库,帮我把视频文件解析成一帧一帧的原始画面信息,那么我只需要读取里面的每一个像素的RGB数值,计算出亮度,然后 ...
- 01- QTP快速入门
QTP概述 QTP安装流程
- ThnikPHP3.2 学习链接整理
ThnikPHP3.2 学习链接整理 ThinkPHP3.2.3 U()方法的使用总结 看云手册 ThinkPHP3.2完全开发手册 TP3.2单字母函数 TP3.x中 M方法和D方法的区别
- 记一次“愉快”的lnmp环境的搭建
愉快的lnmp环境搭建 后续更新 几个笔记记录 yum remove php-mysql yum -y install cmake autoconf wget gcc-c++ gcc zlib pcr ...
- Sqli 注入点解析
目录 Less-1: 字符型注入 Less-2: 数字型注入 Less-3: 单引号字符型+括号 Less-4: 双引号字符型+括号 Less-5: 单引号字符型+固定输出信息 (floor报错注入& ...
- 2.逆向分析Hello World!程序-上
先写一个HelloWorld程序(vs2015 / C++) 编译链接生成可执行文件XX.exe,然后用OD[OllyDbg]打开调试: 代码窗口:默认用于显示反汇编代码,还用于各种注释.标签,分析代 ...
- Ubuntu Linux 学习篇 配置DNS服务器
BIND9 DNS(Domain Name Server,域名服务器)是进行域名(domain name)和与之相对应的IP地址 (IP address)转换的服务器.DNS中保存了一张域名(doma ...