Linux机器安装Nginx配置并实现双向认证

news2024/11/25 14:47:39

Linux机器安装Nginx配置并实现双向认证

一.Nginx的安装配置

Nginx(“engine x”)是一款是由俄罗斯的程序设计师Igor Sysoev所开发高性能的 Web和 反向代理 服务器,也是一个 IMAP/POP3/SMTP 代理服务器。

在高连接并发的情况下,Nginx是Apache服务器不错的替代品。

Nginx 安装

系统平台:CentOS release 6.6 (Final) 64位。

(1)安装编译工具及库文件

yum -y install make zlib zlib-devel gcc-c++ libtool  openssl openssl-devel

(2)首先要安装 PCRE

PCRE 作用是让 Nginx 支持 Rewrite 功能。

1、下载 PCRE 安装包,下载地址: http://downloads.sourceforge.net/project/pcre/pcre/8.35/pcre-8.35.tar.gz

[root@bogon src]# cd /usr/local/src/
[root@bogon src]# wget http://downloads.sourceforge.net/project/pcre/pcre/8.35/pcre-8.35.tar.gz

在这里插入图片描述

2、解压安装包:

[root@bogon src]# tar zxvf pcre-8.35.tar.gz

3、进入安装包目录

[root@bogon src]# cd pcre-8.35

4、编译安装

[root@bogon pcre-8.35]# ./configure
[root@bogon pcre-8.35]# make && make install

5、查看pcre版本

[root@bogon pcre-8.35]# pcre-config --version

在这里插入图片描述

安装 Nginx

1、下载 Nginx,下载地址:https://nginx.org/en/download.html

[root@bogon src]# cd /usr/local/src/
[root@bogon src]# wget http://nginx.org/download/nginx-1.6.2.tar.gz

在这里插入图片描述

[root@bogon src]# tar zxvf nginx-1.6.2.tar.gz

3、进入安装包目录

[root@bogon src]# cd nginx-1.6.2

4、编译安装

[root@bogon nginx-1.6.2]# ./configure --prefix=/usr/local/webserver/nginx --with-http_stub_status_module --with-http_ssl_module --with-pcre=/usr/local/src/pcre-8.35
[root@bogon nginx-1.6.2]# make
[root@bogon nginx-1.6.2]# make install

5、查看nginx版本

[root@bogon nginx-1.6.2]# /usr/local/webserver/nginx/sbin/nginx -v

在这里插入图片描述

到此,nginx安装完成。


Nginx 配置

进入到配置目录下

[root@bogon nginx-1.6.2]#  cd /usr/local/webserver/nginx/conf/

创建 Nginx 运行使用的用户 www:

[root@bogon conf]# /usr/sbin/groupadd www 
[root@bogon conf]# /usr/sbin/useradd -g www www

更改文件名字为nginx.conf.default

[root@bogon conf]#  sudo mv nginx.conf nginx.conf.default

创建新的nginx配置文件,并随便写入几个字符串

[root@bogon conf]#  echo "string" > nginx.conf

配置nginx.conf ,执行命令并打开文件

[root@bogon conf]#  vim /usr/local/webserver/nginx/conf/nginx.conf

i进入写入模式,删除nginx.conf文件里的string内容并粘贴下方内容后,按Esc退出编辑并进入命令行模式,直接输入:wq保存并退出

user www www;
worker_processes 1; #设置值和CPU核心数一致
error_log /usr/local/webserver/nginx/logs/nginx_error.log crit; #日志位置和日志级别
pid /usr/local/webserver/nginx/nginx.pid;
#Specifies the value for maximum file descriptors that can be opened by this process.
worker_rlimit_nofile 65535;
events
{
  use epoll;
  worker_connections 65535;
}
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';
  
#charset gb2312;
     
  server_names_hash_bucket_size 128;
  client_header_buffer_size 32k;
  large_client_header_buffers 4 32k;
  client_max_body_size 8m;
     
  sendfile on;
  tcp_nopush on;
  keepalive_timeout 60;
  tcp_nodelay on;
  fastcgi_connect_timeout 300;
  fastcgi_send_timeout 300;
  fastcgi_read_timeout 300;
  fastcgi_buffer_size 64k;
  fastcgi_buffers 4 64k;
  fastcgi_busy_buffers_size 128k;
  fastcgi_temp_file_write_size 128k;
  gzip on; 
  gzip_min_length 1k;
  gzip_buffers 4 16k;
  gzip_http_version 1.0;
  gzip_comp_level 2;
  gzip_types text/plain application/x-javascript text/css application/xml;
  gzip_vary on;
 
  #limit_zone crawler $binary_remote_addr 10m;
 #下面是server虚拟主机的配置
 server
  {
    listen 80;#监听端口
    server_name localhost;#域名
    index index.html index.htm index.php;
    root /usr/local/webserver/nginx/html;#站点目录
      location ~ .*\.(php|php5)?$
    {
      #fastcgi_pass unix:/tmp/php-cgi.sock;
      fastcgi_pass 127.0.0.1:9000;
      fastcgi_index index.php;
      include fastcgi.conf;
    }
    location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|ico)$
    {
      expires 30d;
  # access_log off;
    }
    location ~ .*\.(js|css)?$
    {
      expires 15d;
   # access_log off;
    }
    access_log off;
  }

}

执行下方cat命令,查看文件的内容保存写入情况。

[root@bogon conf]#  cat /usr/local/webserver/nginx/conf/nginx.conf

检查配置文件nginx.conf的正确性命令:

[root@bogon conf]# /usr/local/webserver/nginx/sbin/nginx -t

在这里插入图片描述
配置关闭防火墙命令:

[root@bogon conf]# iptables -F -t nat
[root@bogon conf]# iptables -F -t filter
[root@bogon conf]# iptables -F -t mangle

vim改配置后,需重新载入配置文件:

[root@bogon conf]# /usr/local/webserver/nginx/sbin/nginx -s reload

启动 Nginx

Nginx 启动命令如下:

[root@bogon conf]# /usr/local/webserver/nginx/sbin/nginx

在这里插入图片描述

访问站点

从浏览器访问我们配置的站点ip,此时只是能访问http类型:
在这里插入图片描述


二.Nginx实现https双向认证

对于一般的https网站来说,实际上https所使用的证书是属于单向验证,即客户端单向验证服务器的安全性,而服务器端是没有对客户端的身份进行验证的。

如果自己部署了一些安全性较高的网站不希望被其他人随意访问,就可以尝试部署https的双向认证,对客户端也添加证书认证。本文将会使用openssl自签证书来完成最简单的一个https双向认证。

在开始之前我们新建一个目录专门用来存放这次生成证书相关的全部文件。

[root@bogon conf]# mkdir /home/test-certs/
[root@bogon conf]# cd /home/test-certs/

1.创建根证书

#创建根证书私钥:
openssl genrsa -out root.key 1024
#创建根证书请求文件:
openssl req -new -out root.csr -key root.key
#创建根证书:
openssl x509 -req -in root.csr -out root.crt -signkey root.key -CAcreateserial -days 3650

接下来我们开始逐个命令进行讲解,首先我们需要生成一个root.key文件
在这里插入图片描述
在这里插入图片描述

root.key文件生成之后,我们就可以根据key文件来生成一个记录证书信息的csr文件用于申请证书。csr文件需要记录相关的证书申请人的地址和邮件等信息,最后还可以设置一个密码,当需要使用这个csr文件来申请证书的适合就需要输入这个密码,否则无法使用,如果不想设置的话直接回车即可跳过
在这里插入图片描述
生成了keycsr文件之后,我们就可以自己生成一个crt的证书文件,由于这里是测试,我们可以直接把时间设定为10年
在这里插入图片描述

到这一步,我们已经生成了一个完整的自签CA证书,其中包含了私钥key文件,证书信息csr文件和公钥crt文件。

生成p12证书

为了方便使用,我们需要把证书打包成p12格式的证书文件,然后在客户端的电脑上导入。同样的在生成p12文件的时候我们最好添加一个密码保护(记好,后续要用),这样就算证书泄露了也不会导致安全问题。

openssl pkcs12 -export -clcerts -in root.crt -inkey root.key -out root.p12

在这里插入图片描述

  • 证书的Common Name可填写为 root 。 所有客户端和服务器端的证书这个字段需要填写域名或者ip一定要注意的是,根证书的这个字段和客户端证书、服务器端证书不能一样
  • 其他所有字段的填写,根证书、服务器端证书、客户端证书需保持一致
  • 无用项可以选择直接回车跳过

最终得到:

  • root.crt : 签名有效期为10年的根证书

  • root.key: 根证书私钥文件

  • root.csr: 根证书请求文件

  • root.p12: 根证书p12文件,这个证书文件包含客户端的公钥和私钥

后面我们可以用这个根证书去颁发服务器证书客户端证书

2.根据根证书创建服务端证书

#生成服务器端证书私钥:
openssl genrsa -out server.key 1024
 
#生成服务器证书请求文件,过程和注意事项参考根证书,本节不详述:
openssl req -new -out server.csr -key server.key
 
#生成服务器端公钥证书
openssl x509 -req -in server.csr -out server.crt -signkey server.key -CA root.crt -CAkey root.key -CAcreateserial -days 3650

通过上面的三个命令,我们得到:

  • server.key:服务器端的秘钥文件
  • server.crt:有效期十年的服务器端公钥证书,使用根证书和服务器端私钥文件一起生成
  • root.srl: CA签发证书的序列号记录文件,全名是 root.Serial 。
  • server.csr : 服务端证书请求文件(请求证书时使用, 后续配置无用)

3.根据根证书创建客户端证书

需要注意的是, 可以生成多个客户端证书, 只需安装下面1-4步重新生成即可

#生成客户端证书秘钥:
openssl genrsa -out client.key 1024

#生成客户端证书请求文件,过程和注意事项参考根证书,本节不详述:
openssl req -new -out client.csr -key client.key

#生客户端证书
openssl x509 -req -in client.csr -out client.crt -signkey client.key -CA root.crt -CAkey root.key -CAcreateserial -days 3650

#生客户端p12格式证书,需要输入一个密码,选一个好记的,比如123456
openssl pkcs12 -export -clcerts -in client.crt -inkey client.key -out client.p12

重复使用上面的三个命令,我们得到:

  • client.key:客户端的私钥文件
  • client.crt:有效期十年的客户端证书,使用根证书和客户端私钥一起生成
  • client.p12:客户端p12格式,这个证书文件包含客户端的公钥和私钥,主要用来给浏览器或postman访问使用
  • clinet.csr : 客户端证书请求文件(请求证书时使用, 后续配置无用)

4.改nginx配置

进入到配置目录下

[root@bogon test-certs]# cd /usr/local/webserver/nginx/conf/

配置nginx.conf ,执行命令并打开文件

[root@bogon conf]#  vim /usr/local/webserver/nginx/conf/nginx.conf
...省略...
#下面是server虚拟主机的配置
 server
  {
    listen 443 ssl;#监听端口
    server_name localhost;#域名
    
    ssl                  on;  
    ssl_certificate      /data/sslKey/server.crt;  #server公钥证书
    ssl_certificate_key  /data/sslKey/server.key;  #server私钥
    ssl_client_certificate /data/sslKey/root.crt;  #根证书,可以验证所有它颁发的客户端证书
    ssl_verify_client on;  #开启客户端证书验证
    
    index index.html index.htm index.php;
    root /usr/local/webserver/nginx/html;#站点目录
      location ~ .*\.(php|php5)?$
    {
...省略...

i进入写入模式,删除nginx.conf文件里的string内容并粘贴下方内容后,按Esc进入命令行模式,输入:wq保存并退出

vim改配置后,需重新载入配置文件:

[root@bogon conf]# /usr/local/webserver/nginx/sbin/nginx -s reload

注意:

配置的主要内容是配置了服务器端证书的公钥私钥以及根证书的公钥, 并且ssl_verify_client 参数设置为 on

如果客户端证书不是由根证书直接颁发的,配置中还需要加一个配置:ssl_verify_depth 1;

配置完成后,通过nginx -s reload 令配置文件重新加载, 无需重启

如果手里面只有通过正规途径申请下来的证书(而不是上面自签证做法), 得到的证书如下面所示, 这里只有服务端证书而没有服务端和根证书, 所以仍需要我们以自签证的方式生成根证书以及客户端证书

5.访问测试

访问方式1:curl带证书访问

进入到之前生成证书的目录下:

[root@bogon conf]#  cd /home/test-certs/

使用curl携带crtkey访问你的域名

[root@bogon test-certs]#  curl --cert ./client.crt --key ./client.key https://域名.com -k

成功返回:

<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
    body {
        width: 35em;
        margin: 0 auto;
        font-family: Tahoma, Verdana, Arial, sans-serif;
    }
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>

<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>

<p><em>Thank you for using nginx.</em></p>
</body>
</html>

失败返回:

<html>
<head><title>400 No required SSL certificate was sent</title></head>
<body bgcolor="white">
<center><h1>400 Bad Request</h1></center>
<center>No required SSL certificate was sent</center>
<hr><center>nginx/1.6.2</center>
</body>
</html>

访问方式2:浏览器导入证书

以Chrom浏览器为例:

进入到之前生成证书的目录下:

[root@bogon test-certs]#  cd /home/test-certs/

使用se命令从Linux主机下载文件,选择保存位置并保存到你的电脑上。

[root@bogon test-certs]#  sz client.p12     #send(发送)

打开Chrom浏览器找到 设置→隐私设置和安全性→安全→管理设备证书→导入证书→选择并导入client.p12证书,输入相关密码,直接下一步、下一步、完成,即可导入成功,并在浏览器输入配置的相关地址访问,点击"确定"即可成功访问。
在这里插入图片描述
在这里插入图片描述

三.可能用到的其它命令

cd /home/test-certs/  #证书存储目录
cd /usr/local/src/  #Nginx软件下载及安装的目录
/usr/local/webserver/nginx/sbin/nginx -v  #查找安装的nginx版本

cat /usr/local/webserver/nginx/conf/nginx.conf  #查看文件内容
vim /usr/local/webserver/nginx/conf/nginx.conf  #修改文件内容,按i进入写入模式, 修改完按esc进入命令行模式,输入:wq保存退出

echo "string" > nginx.conf  #创建nginx文件touch
sudo mv nginx.conf.default nginx.conf #更改文件名字
cd /usr/local/webserver/nginx/conf/   #进入到配置目录下
	
/usr/local/webserver/nginx/sbin/nginx -s reload            # 重新载入配置文件
/usr/local/webserver/nginx/sbin/nginx -s reopen            # 重启 Nginx
/usr/local/webserver/nginx/sbin/nginx -s stop              # 停止 Nginx
ps -ef | grep nginx  #查找ngunx进程
kill -QUIT 进程号  #杀掉nginx进程

curl --cert ./client.crt --key ./client.key https://域名 -k  #带着证书访问创建的服务

lscpu  #查找linux机器的cpu信息,电脑位数等
rz 文件名  #received(接收),从Windows上传文件,在Linux命令行输入rz 会弹出对话框,选择你要上传的文件,选择打开就上传到Linux主机。上传完可以使用ls查看。
sz 文件名 #send(发送),从Linux主机下载文件,下载命令为sz ,后面跟要下载的文件名,可以选择下载的保存文件夹。
touch 文件名  #创建文件
mkdir 文件夹名字  #创建文件夹
rm 文件名   #删除文件
rm -rf 文件夹名称  #删除文件夹

openssl pkcs12 -export -out client.pfx -inkey client.key -in client.crt  #将证书转换为pfx

参考文章:
[菜鸟教程]Nginx 安装配置: https://www.runoob.com/linux/nginx-install-setup.html
[知乎]nginx篇08-添加客户端证书认证: https://zhuanlan.zhihu.com/p/377622199
[CSDN]nginx实现双向认证: https://blog.csdn.net/qq_41937509/article/details/126958670
使用XShell从Windows上传文件到Linux服务器下载到本地: https://blog.51cto.com/u_11554106/3608629

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/90568.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

TiDB | TiDB在5A级物流企业核心系统的应用与实践

TiDB在5A级物流企业核心系统的应用与实践前言一、业务背景科捷物流概况神州金库简介二、现状与挑战神州金库现有技术体系业务挑战应对方案三、TiDB解决方案测试迁移收益问题四、说在最后前言 历经了近半年的测试验证和迁移准备&#xff0c;神州金库3.0核心系统 WMS 正式从 MyS…

力扣(LeetCode)152. 乘积最大子数组(C++)

序列dp f[i]f[i]f[i] 表示以 iii 结尾的连续子数组的最大乘积&#xff0c;d[i]d[i]d[i] 表示以 iii 结尾的连续子数组的最小乘积 。 如果只有正数&#xff0c;我们只需要考虑最大乘积 f[i]f[i]f[i] &#xff1b;有负数&#xff0c;需要考虑与负数相乘的数&#xff0c;越小越好…

【unity】基础交互入门(碰撞交互事件OnTriggerEnter和OnCollisionEnter)

一、碰撞交互事件OnTriggerEnter 1、在场景中添加两个几何体&#xff08;例如Cube和Sphere&#xff09; 2、添加Rigidbody&#xff08;刚体&#xff09;component 点击Cube&#xff08;正方体&#xff09;对象&#xff0c;在面板找到这个按钮&#xff0c;添加component 搜索…

Zabbix6.0使用教程 (五)—zabbix从二进制包安装上篇

大家好&#xff0c;我是乐乐。上一期我们已经讲过从源代码安装zabbix&#xff0c;本期着重讲从二进制包安装zabbix。 当我们在ZABBIX官方存储库可以看到&#xff0c;Zabbix SIA 提供如下官方RPM和DEB包&#xff1a; Red Hat Enterprise Linux/CentOS Debian/Ubuntu/Raspbian …

即时通讯音视频开发编码H.264的特点与优势

即时通讯应用中的实时音视频技术&#xff0c;几乎是IM开发中的最后一道高墙。原因在于&#xff1a;实时音视频技术 音视频处理技术 网络传输技术 的横向技术应用集合体&#xff0c;而公共互联网不是为了实时通信设计的。 国际上制定视频编解码技术的组织有两个&#xff0c;一…

[附源码]Python计算机毕业设计SSM基于Java的运动健身平台(程序+LW)

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

博客网页设计制作 简单静态HTML网页作品 DIV CSS个人网页作业成品 dreamweaver学生个人博客网站模板

&#x1f389;精彩专栏推荐&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业…

Mentor-dft 学习笔记 day42-ASCII File Format(2)

FORCE “primary_input_pin” <value> <time>; 此命令用于在给定时间强制选定主输入引脚上的值&#xff08;0,1、X或Z&#xff09;。时间值不得低于该程序的先前时间值。每个程序的时间在时间0再次开始。主输入引脚将用双引号括起来。APPLY “scan_group_procedure…

高通Ride软件开发包使用指南(10)

高通Ride软件开发包使用指南&#xff08;10&#xff09;7 平台管理任务7.1 连接到控制台7.1.1 串口连接SOC1和SOC27.1.2 识别 SOC1 或 SOC 27.1.3 识别平台构建7.1.4 串口连接SA9000P7.1.5 通过串口连接到 Aurix7.2 在 SIP1 和 SIP2 上为 SA8xxxP 分配 IP 地址7.2.1 分配静态 I…

【数据预处理机器学习】对于薪资数据的倾斜情况以及盒图离群点的探究

文章目录一.需求背景二. 任务开始2.1 薪酬的中位数、均值和众数和数据倾斜模块详细设计2.2 按不同的类别划分职位中的薪酬数据&#xff0c;画盒图/箱线图&#xff0c;检查孤立点/离群点一.需求背景 课题中心&#xff1a;招聘网站的职位招聘数据预处理 之前的文章&#xff0c;…

【JAVA】final关键字

&#x1f3c6;今日学习目标&#xff1a;final关键字 &#x1f603;创作者&#xff1a;颜颜yan_ ✨个人主页&#xff1a;颜颜yan_的个人主页 ⏰本期期数&#xff1a;第一期 &#x1f389;专栏系列&#xff1a;JAVA 文章目录前言final关键字final关键字修饰类示例&#xff1a;fin…

[附源码]Python计算机毕业设计高校社团管理平台Django(程序+LW)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程 项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等…

笔试强训(四十五)

目录一、选择题二、编程题2.1 查找兄弟单词2.1.1 题目2.1.2 题解一、选择题 &#xff08;1&#xff09;IP数据报分片的重组通常发生在&#xff08;D&#xff09; A.源主机和数据经过的路由器上 B.源主机上 C.数据报经过的路由器上 D.目的主机上 数据分片是网络层发现上层给的数…

Java反射(通俗易懂!)

文章目录2.反射2.1反射的概述2.2 获取 Class类对象的三种方式2.3反射获取构造方法并使用2.3.1Class 类获取构造方法对象的方法2.3.2Constructor类用于创建对象的方法2.3.3小结2.4反射获取成员变量并使用2.4.1Class类获取成员变量对象的方法2.4.2Field类用于给成员变量赋值的方法…

木字楠后台管理系统开发(5):Vue登陆界面编写以及与后台联调测试

&#x1f3b6; 文章简介&#xff1a;木字楠后台管理系统开发(5)&#xff1a;Vue登陆界面编写以及与后台联调测试 &#x1f4a1; 创作目的&#xff1a;为了带大家完整的体验木字楠后台管理系统模版的开发流程 ☀️ 今日天气&#xff1a;愿冷空气冷藏你的烦恼,让快乐永驻。 &…

PaddleX API开发模式快速上手文档

目录一. 环境安装1.1 PaddlePaddle-gpu安装1.2 PaddleX安装二. 快速训练2.1 准备数据集2.2 定义图像预处理与数据增强2.3 定义并装载数据2.4 开始训练2.5 使用Visual查看训练情况三. 部署推理3.1 模型加载预测PaddleX官方文档(以图像分类为例)&#xff1a;PaddleX/docs/quick_s…

MySQL索引优化(一)

文章目录一、索引介绍1. 什么是MySQL的索引2. 索引数据结构3. 索引优势4. 索引劣势5. 索引使用场景&#xff08;1&#xff09;需要建立索引的场景&#xff08;2&#xff09;不推荐建立索引的场景6. 索引分类&#xff08;1&#xff09;主键索引&#xff08;2&#xff09;唯一索引…

【k8s 实战】Prometheus Operator 高级配置- 监控Kubernetes自动发现

上文我们一起学习了如何在 Prometheus Operator 下面自定义一个监控选项&#xff0c;以及自定义报警规则的使用。那么我们还能够直接使用前面课程中的自动发现功能吗&#xff1f;如果在我们的 Kubernetes 集群中有了很多的 Service/Pod&#xff0c;那么我们都需要一个一个的去建…

MATLAB傅里叶变换和加入噪声后的傅里叶变换

1.傅里叶变换代码 查看String为傅里叶变换的button添加callback函数&#xff0c;可以通过查看callback函数快速定位到该位置 function pushbutton37_Callback(hObject, eventdata, handles)%傅里叶变换&#xff08;频谱图&#xff09; axes(handles.show_proImg); global fpat…

[附源码]Nodejs计算机毕业设计基于的二手房交易系统Express(程序+LW)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程。欢迎交流 项目运行 环境配置&#xff1a; Node.js Vscode Mysql5.7 HBuilderXNavicat11VueExpress。 项目技术&#xff1a; Express框架 Node.js Vue 等等组成&#xff0c;B/S模式 Vscode管理前后端分…