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请求发送到代理服务器中由代理服务 ...
随机推荐
- golang面向对象分析
说道面向对象(OOP)编程, 就不得不提到下面几个概念: 抽象 封装 继承 多态 其实有个问题Is Go An Object Oriented Language?, 随便谷歌了一下, 你就发现讨论这个 ...
- spring boot @Schedule 如何定时请求任务
spring boot 定时任务,添加两个注解即可: 1,启动类添加:@EnableScheduling 2,方法上添加注解:@Scheduled(cron = "0/5 * * * * ? ...
- 带你温习一下webpack配置
前言 你知道node.webpack和npm之间的关系吗? 首先来介绍一下node.webpack和npm的有什么样的关系. 我们知道webpack是对我们所开发的html.css.js等模块化开发的 ...
- 1027 Colors in Mars
People in Mars represent the colors in their computers in a similar way as the Earth people. That is ...
- SpringBoot + Dubbo + Zookper 整合
经过2个小时的调试终于弄完了,过程如下, 环境: JDK1.8 .Springboot2.2.6. Windows10系统 如果不看Dubbo 管理页面的话就不用下载 Dubbo-domain了,这个 ...
- Windows核心编程 第六章 线程基础知识 (下)
6.6 线程的一些性质 到现在为止,讲述了如何实现线程函数和如何让系统创建线程以便执行该函数.本节将要介绍系统如何使这些操作获得成功. 图6 - 1显示了系统在创建线程和对线程进行初始化时必须做些什么 ...
- Python练习3-XML-RPC实现简单的P2P文件共享
XML-RPC实现简单的P2P文件共享 先来个百度百科: XML-RPC的全称是XML Remote Procedure Call,即XML(标准通用标记语言下的一个子集)远程过程调用.它是一套允许运 ...
- SpringJUnit4ClassRunner requires JUnit 4.12 or higher
报错:需要Junit 4.12 或者更高的版本 原因:查看pom.xml文件引入的Junit版本为4.11 解决办法:修改Junit版本为4.12即可
- java的继承和组合
继承和组合是java中非常常用的两种创建新类型的方法,两者都能提高代码的复用率. 继承主要是想让子类继承父类的基本特性:组合技术通常用于想在新类中使用现有类的功能,而非它的接口.两者的分别是" ...
- JDBC往数据库里插入数据
首先还是一个工具类 插入数据