本文原创,转载请附上原作者链接!https://www.cnblogs.com/LSWu/articles/14848324.html

1.安装node.js

从node.js官网上下载node.js的LTS安装包,然后正常安装即可,安装完成后,node.js自带的npm工具也会相应的安装好。然后在命令行下输入node -v和npm -v,返回如下信息说明安装成功。

  1. 1 lishanwu@Lenovo-PC MINGW64 ~/Desktop/nodejs_test
  2. 2 $ node -v
  3. 3 v14.16.1
  4. 4
  5. 5 lishanwu@Lenovo-PC MINGW64 ~/Desktop/nodejs_test
  6. 6 $ npm -v
  7. 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文件如下所示

  1. #user nobody;
  2. worker_processes 1;
  3.  
  4. #error_log logs/error.log;
  5. #error_log logs/error.log notice;
  6. #error_log logs/error.log info;
  7.  
  8. #pid logs/nginx.pid;
  9.  
  10. events {
  11. worker_connections 1024;
  12. }
  13.  
  14. http {
  15. include mime.types;
  16. default_type application/octet-stream;
  17.  
  18. #log_format main '$remote_addr - $remote_user [$time_local] "$request" '
  19. # '$status $body_bytes_sent "$http_referer" '
  20. # '"$http_user_agent" "$http_x_forwarded_for"';
  21.  
  22. #access_log logs/access.log main;
  23.  
  24. sendfile on;
  25. #tcp_nopush on;
  26.  
  27. #keepalive_timeout 0;
  28. keepalive_timeout 65;
  29.  
  30. #gzip on;
  31.  
  32. server {
  33. listen 80;
  34. server_name localhost;
  35.  
  36. #charset koi8-r;
  37.  
  38. #access_log logs/host.access.log main;
  39.  
  40. #这里简单设置一下反向代理
  41. location /api/ {
  42. proxy_pass http://192.168.x.xxx:4000; #我的本机ipv4地址,最好不要用localhost或者127.0.0.1,血的教训<-_->
  43. }
         #我的nodejs所在主机的ip为192.168.xxx.x:4000    
         #我的nginx所在主机的ip为192.168.xxx.x,将这里改为自己的本机ip,我不想被网络攻击,所以不能贴出我的ip
  44.  
  45. location / {
  46. root html;
  47. index index.html index.htm;
  48. }
  49.  
  50. #error_page 404 /404.html;
  51.  
  52. # redirect server error pages to the static page /50x.html
  53. #
  54. error_page 500 502 503 504 /50x.html;
  55. location = /50x.html {
  56. root html;
  57. }
  58.  
  59. # proxy the PHP scripts to Apache listening on 127.0.0.1:80
  60. #
  61. #location ~ \.php$ {
  62. # proxy_pass http://127.0.0.1;
  63. #}
  64.  
  65. # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
  66. #
  67. #location ~ \.php$ {
  68. # root html;
  69. # fastcgi_pass 127.0.0.1:9000;
  70. # fastcgi_index index.php;
  71. # fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
  72. # include fastcgi_params;
  73. #}
  74.  
  75. # deny access to .htaccess files, if Apache's document root
  76. # concurs with nginx's one
  77. #
  78. #location ~ /\.ht {
  79. # deny all;
  80. #}
  81. }
  82.  
  83. # another virtual host using mix of IP-, name-, and port-based configuration
  84. #
  85. #server {
  86. # listen 8000;
  87. # listen somename:8080;
  88. # server_name somename alias another.alias;
  89.  
  90. # location / {
  91. # root html;
  92. # index index.html index.htm;
  93. # }
  94. #}
  95.  
  96. # HTTPS server
  97. #
  98. #server {
  99. # listen 443 ssl;
  100. # server_name localhost;
  101.  
  102. # ssl_certificate cert.pem;
  103. # ssl_certificate_key cert.key;
  104.  
  105. # ssl_session_cache shared:SSL:1m;
  106. # ssl_session_timeout 5m;
  107.  
  108. # ssl_ciphers HIGH:!aNULL:!MD5;
  109. # ssl_prefer_server_ciphers on;
  110.  
  111. # location / {
  112. # root html;
  113. # index index.html index.htm;
  114. # }
  115. #}
  116.  
  117. }

  然后重启nginx服务器,注意在进程管理器中确保在重启前关闭nginx的进程,然后再启动nginx服务器。

4.编写nodejs后端的测试代码,然后启动nodejs服务

  main.js如下所示

  1. var express = require('express');
  2. var app = express();
  3. var fs = require("fs");
  4.  
  5. app.get('/api/test0', function (req, res) {
  6. console.log(req.url);
  7. res.setHeader("Content-Type", "text/html;charset=utf-8")
  8. res.end( "<h2>accessed test0</h2>" );
  9. })
  10.  
  11. app.get('/api/test1', function (req, res) {
  12. res.setHeader("Content-Type", "text/html;charset=utf-8")
  13. res.end( "<h2>accessed test1</h2>" );
  14. })
  15.  
  16. app.get('/api/test1/setting', function (req, res) {
  17. res.setHeader("Content-Type", "text/html;charset=utf-8")
  18. res.end( "<h2>this is setting of test1</h2>" );
  19. })
  20.  
  21. var server = app.listen(4000, function () {
  22. var host = server.address().address
  23. var port = server.address().port
  24. console.log("应用实例,访问地址为 http://%s:%s", host, port)
  25. })

  启动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进行反向代理的更多相关文章

  1. [转]Windows 下 Nginx+IIS 使用

    本文转自:https://blog.csdn.net/chihen/article/details/52698594 Windows 下 Nginx+IIS 使用 一.Nginx简介 Nginx (& ...

  2. Windows下Nginx实现负载均衡

    Apache,Nginx Apache和Nginx都属于属于 静态页面服务器,都有插件支持动态编程语言处理,但Nginx的IO模比Apache更适合跑代理.所以一般都作为前端缓冲代理(Nginx的反向 ...

  3. Nginx插件之openresty反向代理和日志滚动配置案例

    Nginx插件之openresty反向代理和日志滚动配置案例 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.openresty介绍 1>.Nginx介绍 Nginx是一款 ...

  4. 基于nginx + lua实现的反向代理动态更新

    大家都知道,nginx是当前应用非常广泛的web服务器,热度因为他的高并发高性能高可靠性,且轻量级!牛逼的不行,不多说这些. 今天要介绍的是,如何基于nginx和lua脚本,也就是在openresty ...

  5. 【架构师之路】Nginx负载均衡与反向代理—《亿级流量网站架构核心技术》

    本篇摘自<亿级流量网站架构核心技术>第二章 Nginx负载均衡与反向代理 部分内容. 当我们的应用单实例不能支撑用户请求时,此时就需要扩容,从一台服务器扩容到两台.几十台.几百台.然而,用 ...

  6. nginx基于TCP的反向代理

    一.4层的负载均衡 Nginx Plus的商业授权版开始具有TCP负载均衡的功能.从Nginx 1.7.7版本开始加入的,现在变成了一个商业收费版本,想要试用,需要在官网申请.也就是说,Nginx除了 ...

  7. (Nginx+Apache)实现反向代理与负载均衡

    反向代理负载均衡 使用代理服务器可以将请求转发给内部的Web服务器,使用这种加速模式显然可以提升静态网页的访问速度.因此也可以考虑使用这种技术,让代理服务器将请求均匀转发给多台内部Web服务器之一上, ...

  8. Nginx总结(五)如何配置nginx和tomcat实现反向代理

    前面讲了如何配置Nginx虚拟主机,大家可以去这里看看nginx系列文章:https://www.cnblogs.com/zhangweizhong/category/1529997.html 今天要 ...

  9. 如何配置nginx和tomcat实现反向代理?

    什么是反向代理         通常的代理服务器,只用于代理内部网络对Internet的连接请求,客户机必须指定代理服务器,并将本来要直接发送到Web服务器上的http请求发送到代理服务器中由代理服务 ...

随机推荐

  1. golang面向对象分析

    说道面向对象(OOP)编程, 就不得不提到下面几个概念: 抽象 封装 继承 多态 其实有个问题Is Go An Object Oriented Language?, 随便谷歌了一下, 你就发现讨论这个 ...

  2. spring boot @Schedule 如何定时请求任务

    spring boot 定时任务,添加两个注解即可: 1,启动类添加:@EnableScheduling 2,方法上添加注解:@Scheduled(cron = "0/5 * * * * ? ...

  3. 带你温习一下webpack配置

    前言 你知道node.webpack和npm之间的关系吗? 首先来介绍一下node.webpack和npm的有什么样的关系. 我们知道webpack是对我们所开发的html.css.js等模块化开发的 ...

  4. 1027 Colors in Mars

    People in Mars represent the colors in their computers in a similar way as the Earth people. That is ...

  5. SpringBoot + Dubbo + Zookper 整合

    经过2个小时的调试终于弄完了,过程如下, 环境: JDK1.8 .Springboot2.2.6. Windows10系统 如果不看Dubbo 管理页面的话就不用下载 Dubbo-domain了,这个 ...

  6. Windows核心编程 第六章 线程基础知识 (下)

    6.6 线程的一些性质 到现在为止,讲述了如何实现线程函数和如何让系统创建线程以便执行该函数.本节将要介绍系统如何使这些操作获得成功. 图6 - 1显示了系统在创建线程和对线程进行初始化时必须做些什么 ...

  7. Python练习3-XML-RPC实现简单的P2P文件共享

    XML-RPC实现简单的P2P文件共享 先来个百度百科: XML-RPC的全称是XML Remote Procedure Call,即XML(标准通用标记语言下的一个子集)远程过程调用.它是一套允许运 ...

  8. SpringJUnit4ClassRunner requires JUnit 4.12 or higher

    报错:需要Junit 4.12 或者更高的版本 原因:查看pom.xml文件引入的Junit版本为4.11 解决办法:修改Junit版本为4.12即可

  9. java的继承和组合

    继承和组合是java中非常常用的两种创建新类型的方法,两者都能提高代码的复用率. 继承主要是想让子类继承父类的基本特性:组合技术通常用于想在新类中使用现有类的功能,而非它的接口.两者的分别是" ...

  10. JDBC往数据库里插入数据

    首先还是一个工具类 插入数据