当前位置: 首页 > news >正文

[Nginx]反向代理Node将3000端口访问转换成80端口

[Nginx]反向代理Node将3000端口访问转换成80端口
原创gooqii 最后发布于2017-05-15 11:08:00 阅读数 1875  收藏
展开
[Nginx]反向代理Node将3000端口访问转换成80端口(https443端口)
@Author GQ 2017年05月15日  

最近刚接触node,用express搭建,node默认是3000端口,当然也
可以自己改,但是服务器默认是80,然而将node改成80并没有权限
,所以nginx将是最好的选择!

2017年07月26日
由于需要支持微信小程序,必须改成https请求,
所以记录下:
    http => https

2017年07月31日
微信小程序居然提示不支持TLSv1,然而我的Nginx1.0.11写上TLSv1.1 和TLSv1.2还报错,更新下Nginx版本就好了(现在是1.12.1)。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
目的
原本域名访问形式: http://xx.xxx.xxx.xx/
用node搭建后访问: http://localhost:3000(假设是3000端口)
部署到服务器上后: http://xx.xxx.xxx.xx:3000

阿里云默认访问端口为80 ,浏览器输入:

http://xx.xxx.xxx.xx 等于http://xx.xxx.xxx.xx:80

所以,现在要通过nginx改成访问域名即是 3000端口的内容:
http://xx.xxx.xxx.xx 等于http://xx.xxx.xxx.xx:3000

安装工具
通过brew安装nginx
brew install nginx
1
启动服务
//mac
sudo nginx

//win
C:\server\nginx-1.0.2>start nginx
1
2
3
4
5
6


其他命令
//停止
C:\server\nginx-1.0.2>nginx -s stop

C:\server\nginx-1.0.2>nginx -s quit

//重载
C:\server\nginx-1.0.2>nginx -s reload

//查看版本
C:\server\nginx-1.0.2>nginx -v
1
2
3
4
5
6
7
8
9
10
**注:**stop是快速停止nginx,可能并不保存相关信息;quit是完整有序的停止nginx,并保存相关信息。

测试
打开浏览器输入
http://localhost:8080  
1


配置文件
如果要进行配置可以打开/usr/local/etc/nginx/nginx.conf文件进行修改,比如配置域名,端口号等等。

检测配置是否正确(注意在nginx目录下)
//mac
sudo nginx -t

//win
nginx.exe -t -c conf/nginx.conf
1
2
3
4
5


配置文件
...省略...
server {
        #阿里服务器是默认80
        listen       80;
        #这里服务名称 远程写域名,本地写localhost
        #server_name  abc.com www.abc.com;
        server_name  localhost;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
            #node用的3000端口就这样写
            proxy_pass http://127.0.0.1:3000;
            root   html;
            index  index.html index.htm;
        }
...省略...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Nginx配置支持https
首先了解一下http和https的区别:
1. http是超文本传输协议的明文传输,不安全;https则是ssl加密传输协议,安全;
2. https协议需要申请证书;
3. http默认端口80;https默认端口443

什么公钥和私钥,加密和解密就不说了,下面看具体实现:

阿里免费证书链接地址 点击购买

选择图中配置即可显示0元立即购买

注意此证书有效期1年
然后去控制台 安全/证书服务下查看和提交并且等待签发,一般还是很快的1天内就下来了。

这是阿里一个已签发的证书,我使用的是Nginx配置,如下:

找到nginx的安装目录,新建一个cert文件夹,将下载的文件全部复制进去(xxx.pem和xxx.key)

然后找到conf/nginx.conf文件打开编辑Http Server 那段带#注释掉的内容(阿里云有这段内容直接复制改一下即可)

#HTTPS server

    server {

        listen                     443 ssl;
        server_name                这里是你的域名www.baidu.com;

        ssl_certificate            ../cert/xxx.pem;
        ssl_certificate_key        ../cert/xxx.key;

        ssl_session_cache          shared:SSL:1m;
        ssl_session_timeout        5m;
        ssl_ciphers                这里填的阿里云生成的一长串;
        ssl_protocols              TLSv1 TLSv1.1 TLSv1.2;
        ssl_prefer_server_ciphers  on;

        location / {
            proxy_pass http://127.0.0.1:3000;
                root   html;
                index  index.html index.htm;
        }
    }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
然后保存。

然后重启, 在nginx根目录路下执行命令行nginx -s reload

注意 : 我用的nginx版本是1.0.11的,ssl_protocols TLSv1 TLSv1.1 TLSv1.2; 这一行会一直报错:

提示说 invalid TSLv1.1 或者invalid TSLv1.2

所以直接删掉后两个TSL版本改为ssl_protocols TLSv1; 可以正常使用;

再次执行重启命令即可
但由于微信小程序提示说明不支持 TSLv1 低版本,还是辛苦下 升级Nginx 按照之前的配置即可。
————————————————
版权声明:本文为CSDN博主「gooqii」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/baidu_25797177/article/details/72123592

相关文章:

  • nginx报错nginx: [error] open() “/run/nginx.pid” failed (2: No such file or directory)
  • 大连出现今年首次浮尘天气 全市大气重度污染
  • Nginx重启时提示nginx: [emerg] bind() to 0.0.0.0解决方法 老蒋 发布于 2019-06-03 分类:运维笔记 评论(0) 2000+站长交流QQ群: 59
  • 个人签名备份一下
  • create-react-app安装react项目,yurn一直报错 create-react-app安装react项目,yurn一直报错,错误如下图
  • 时空数据模型简介
  • mysql 5.7.18版本安装说明
  • mysql 5.7.28版本安装说明
  • 被人点名骂了一通
  • 浏览器数据库 IndexedDB 入门教程
  • 本是同根生,相煎何太急
  • mysql学习1
  • 收集了一些AJAX入门的文章
  • mac下载安装maven
  • my FAQ about c++/c/mfc .
  • [js高手之路]搞清楚面向对象,必须要理解对象在创建过程中的内存表示
  • [分享]iOS开发 - 实现UITableView Plain SectionView和table不停留一起滑动
  • 【RocksDB】TransactionDB源码分析
  • Android系统模拟器绘制实现概述
  • Angular6错误 Service: No provider for Renderer2
  • conda常用的命令
  • express.js的介绍及使用
  • javascript从右向左截取指定位数字符的3种方法
  • js学习笔记
  • PHP的Ev教程三(Periodic watcher)
  • SAP云平台里Global Account和Sub Account的关系
  • Spark VS Hadoop:两大大数据分析系统深度解读
  • Spring Cloud Feign的两种使用姿势
  • spring cloud gateway 源码解析(4)跨域问题处理
  • Spring思维导图,让Spring不再难懂(mvc篇)
  • Vue 动态创建 component
  • 分享几个不错的工具
  • 近期前端发展计划
  • 类orAPI - 收藏集 - 掘金
  • 使用 Node.js 的 nodemailer 模块发送邮件(支持 QQ、163 等、支持附件)
  • 我这样减少了26.5M Java内存!
  • 小程序上传图片到七牛云(支持多张上传,预览,删除)
  • 一个项目push到多个远程Git仓库
  • k8s使用glusterfs实现动态持久化存储
  • 如何用纯 CSS 创作一个货车 loader
  • ​2021半年盘点,不想你错过的重磅新书
  • ​决定德拉瓦州地区版图的关键历史事件
  • # include “ “ 和 # include < >两者的区别
  • #1014 : Trie树
  • (13):Silverlight 2 数据与通信之WebRequest
  • (Python) SOAP Web Service (HTTP POST)
  • (二)七种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • (六)Hibernate的二级缓存
  • (译) 理解 Elixir 中的宏 Macro, 第四部分:深入化
  • (转)Scala的“=”符号简介
  • .NET Core WebAPI中使用Log4net 日志级别分类并记录到数据库
  • .NET Core 控制台程序读 appsettings.json 、注依赖、配日志、设 IOptions
  • .NET core 自定义过滤器 Filter 实现webapi RestFul 统一接口数据返回格式
  • .NET Core/Framework 创建委托以大幅度提高反射调用的性能
  • .net 发送邮件