CentOS系统环境搭建(二十六)——使用nginx在无域名情况下使用免费证书设置https

centos系统环境搭建专栏🔗点击跳转

文章目录

  • 使用nginx在无域名情况下使用免费证书设置https
    • 1.获取SSL证书
      • 1.1 生成SSL密钥
      • 1.2 生成SSL证书
      • 1.3 重命名密钥文件
    • 2.nginx配置https
      • 2.1 放证书
      • 2.2 修改nginx.conf文件
        • 2.2.1 将80端口重定向到443
        • 2.2.2 端口443配置ssl证书
      • 2.3 启动nginx(这里有坑)
    • 3.一个不用域名用IP的坑

使用nginx在无域名情况下使用免费证书设置https

本文学习自大佬真心无著的博客如何在无域名的情况下使用nginx部署https站点,该博客的跳转链接为https://blog.csdn.net/yxjie2/article/details/126163577。以这篇博客的知识为基础,我将我的centos上的服务成功配置为使用https://124.221.87.224跳转进入,而且没有设置域名,SSL证书也是免费的。

image-20231225232857865

下面展开讲讲具体怎么做的。

1.获取SSL证书

1.1 生成SSL密钥

进入网站免费生成CSR文件,链接具体为https://csr.chinassl.net/generator-csr.html,输入如图内容。域名就填写IP地址即可,也可以设置真正的域名。

image-20231225233826928

然后点击按钮,生成CSR文件。将出现如下两个文本框,点击下载,以我的ip为例子,将获得文件124.221.87.224_csr.txt124.221.87.224_key.txt

image-20231225234056129

1.2 生成SSL证书

进入网站获取免费SSL证书,具体链接为https://csr.chinassl.net/free-ssl.html,将124.221.87.224_csr.txt上传,点击获取免费证书。

image-20231225234352321

然后下载证书文件即可。

image-20231225234507375

1.3 重命名密钥文件

将你的文件124.221.87.224_key.txt重命名为124.221.87.224.private

到此为之,免费的证书你已经拿到了,下面开始讲讲如何在nginx里完美配置这些证书。

2.nginx配置https

我当初安装nginx用的是CentOS系统环境搭建(十一)——CentOS7安装使用Nginx并部署前后端分离项目里面的内容。下面的配置都是这篇博客的延续。

2.1 放证书

将你下载获得的两个文件,124.221.87.224_ssl.crt124.221.87.224.private放置在服务器的文件夹/etc/ssl/下。

2.2 修改nginx.conf文件

我的配置文件是放在/usr/local/nginx/conf/里,这里一定要记得把你原本的nginx.conf文件备份一个,因为下面可能会失败,有大坑!

原本http下,我的配置文件是这样的。

# Nginx所属用户和用户组,这里配置的是nobody。由于Nginx并不会直接向客户端发送数据,只有在请求到达时才加入到Nginx的I/O处理队列中,所以Nginx只需要拥有访问目录的权限即可,无需高额权限
#user  nobody;                     

# 工作进程数,一般设置为系统CPU核心数。对于单核服务器来说,设置为1即可;对于多核服务器,可以设置成CPU核心数
worker_processes  2;               

# 定义错误日志文件路径。Nginx生产环境重要的调试信息将会记录在该文件中
#error_log  logs/error.log;        

#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

# 定义Nginx主进程的PID文件所在位置。若需要向Nginx主进程发送信号时,必须要知道这个进程的PID,因此需要记录到PID文件中
#pid        logs/nginx.pid;         

events {
	# 最大并发数。当同时有多个客户端访问Nginx时,每个访问者占据一个连接,当连接数到达该配置变量的值时,新的访问请求将会等待,直到空闲连接数不到该值再处理新的请求
    worker_connections  1024;      
}

http {
	 # 引入mime.types文件,它可以为不同的文件扩展名设定不同的MIME类型。Nginx不像Apache这样会根据文件扩展名自动推断文件类型,如果文件没有被正确识别MIME类型,就可能会出现浏览器无法正确解释的问题
    include       mime.types;     
	
	# 默认MIME类型,如果服务器无法识别它,那么就让浏览器自己来识别。当Nginx无法识别当前返回的MIME类型时,会采用该参数作为默认值
    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;
	
	# 开启高效文件传输,建议保持默认的开启状态。Nginx的高效文件传输技术可以让其更快地将文件内容传输到客户端,提高文件传输速度
    sendfile        on;     
	
	# 禁用TCP节点推送
	#tcp_nopush     on;
	
	#keepalive_timeout  0;
	# 客户端保持连接的时间,超时后断开连接。连接复用机制,当客户端发送完请求后,连接还会继续保持一段时间,以便快速发起下一次请求
    keepalive_timeout  65;  

	# 开启数据压缩功能
	#gzip  on;	

    server {
		# Nginx监听端口,当有请求到达该端口时,Nginx将会处理该请求。当客户端发送了请求过来后,Nginx会监听到该端口被占用,便会启用该server块去处理该请求
        listen       80;            
		
		# 指定服务端的域名/IP,如果没有域名,则使用IP地址。当Nginx接收到一个请求时,首先会按照请求中的Host(或X-Forwarded-Host)头信息的域名取匹配server_name指令中的值,只要匹配上即可
        server_name  localhost;    

		# 该行是将字符集设置为koi8-r,koi8-r是一种字符编码格式
		#charset koi8-r;
        # 设置字符集为 utf-8
        charset utf-8;

		# 该行是定义了当前这个server块的访问日志文件的存储位置。其中logs/host.access.log表示存储的目录和文件名,main表示使用标准的日志格式。如果该行没有被注释掉,就会在相应的目录下生成一份日志文件,记录该server块的访问日志
        #access_log  logs/host.access.log  main;

		# URL匹配规则。在Nginx中,URL匹配是由location指令提供的
        location / {                
			# 当URL中的路径为空时,会默认从这里找到对应的文件。该块内容的作用是指定处理该请求所使用的文件系统根目录路径
            root   /srv/tencent/page/dist;
            # try_files指令将尝试匹配请求的文件,如果找不到,则返回index.html
            try_files $uri $uri/ /index.html;
        }

        # 后端
        location /api/ {
            # 设置代理服务器发送的http请求头中Host的值为接收到的客户端请求头中的Host值
            proxy_set_header Host $http_host;
            # 设置代理服务器发送的http请求头中X-Real-IP的值为当前请求的客户端IP地址
            proxy_set_header X-Real-IP $remote_addr;
            # 设置代理服务器发送的http请求头中REMOTE-HOST的值为当前请求的客户端IP地址
            proxy_set_header REMOTE-HOST $remote_addr;
            # 设置代理服务器发送的http请求头中X-Forwarded-For的值为所有经过的代理服务器IP地址列表,多个IP地址之间用逗号隔开
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            # 将客户端请求通过代理服务器转发到指定地址
            proxy_pass http://127.0.0.1:8080/api/;
            # 设置代理服务器与后端服务器建立连接的超时时间
            proxy_connect_timeout 3600s;
            # 设置代理服务器从后端服务器读取数据的超时时间
            proxy_read_timeout  3600s;
            # 设置代理服务器向后端服务器发送数据的超时时间
            proxy_send_timeout  3600s;
        }

        location /python/ {
            # 设置代理服务器发送的http请求头中Host的值为接收到的客户端请求头中的Host值
            proxy_set_header Host $http_host;
            # 设置代理服务器发送的http请求头中X-Real-IP的值为当前请求的客户端IP地址
            proxy_set_header X-Real-IP $remote_addr;
            # 设置代理服务器发送的http请求头中REMOTE-HOST的值为当前请求的客户端IP地址
            proxy_set_header REMOTE-HOST $remote_addr;
            # 设置代理服务器发送的http请求头中X-Forwarded-For的值为所有经过的代理服务器IP地址列表,多个IP地址之间用逗号隔开
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            # 将客户端请求通过代理服务器转发到指定地址
            proxy_pass http://127.0.0.1:8081/python/;
            # 设置代理服务器与后端服务器建立连接的超时时间
            proxy_connect_timeout 3600s;
            # 设置代理服务器从后端服务器读取数据的超时时间
            proxy_read_timeout  3600s;
            # 设置代理服务器向后端服务器发送数据的超时时间
            proxy_send_timeout  3600s;
        }

		# 配置 404 页面。当请求的文件不存在,或者因为某种原因无法访问到指定的文件时,返回404
        error_page  404              /404.html;  

		# 错误页面的配置,当出错时会跳转到该页面。当服务端返回错误状态码时,可以为不同的状态码指定不同的错误页面
        error_page   500 502 503 504  /50x.html;    

		# 当请求 URL 精确匹配 /50x.html 时,根据配置路径返回静态页面。配合error_page使用,可以为错误页面指定特定的URI
        location = /50x.html {        
            root   html;
        }

        # 将 PHP 脚本代理到监听在 127.0.0.1:80 的 Apache 服务器,或将 PHP 脚本代理到监听在 127.0.0.1:9000 的 FastCGI 服务器
        #location ~ \.php$ {
        #    proxy_pass   http://127.0.0.1;
        #}
        #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;
        #}
    }

    # 另一个使用 IP、名称和端口的虚拟主机配置
    #
    #server {
    #    listen       8000;
    #    listen       somename:8080;
    #    server_name  somename  alias  another.alias;

    #    location / {
    #        root   html;
    #        index  index.html index.htm;
    #    }
    #}

    # HTTPS 服务器
    #
    #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;
    #    }
    #}
}

到了https下,我的配置文件是这样的。

# Nginx所属用户和用户组,这里配置的是nobody。由于Nginx并不会直接向客户端发送数据,只有在请求到达时才加入到Nginx的I/O处理队列中,所以Nginx只需要拥有访问目录的权限即可,无需高额权限
#user  nobody;                     

# 工作进程数,一般设置为系统CPU核心数。对于单核服务器来说,设置为1即可;对于多核服务器,可以设置成CPU核心数
worker_processes 2;

# 定义错误日志文件路径。Nginx生产环境重要的调试信息将会记录在该文件中
#error_log  logs/error.log;        

#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

# 定义Nginx主进程的PID文件所在位置。若需要向Nginx主进程发送信号时,必须要知道这个进程的PID,因此需要记录到PID文件中
#pid        logs/nginx.pid;         

events {
	# 最大并发数。当同时有多个客户端访问Nginx时,每个访问者占据一个连接,当连接数到达该配置变量的值时,新的访问请求将会等待,直到空闲连接数不到该值再处理新的请求
	worker_connections 1024;
}

http {
	# 引入mime.types文件,它可以为不同的文件扩展名设定不同的MIME类型。Nginx不像Apache这样会根据文件扩展名自动推断文件类型,如果文件没有被正确识别MIME类型,就可能会出现浏览器无法正确解释的问题
	include mime.types;

	# 默认MIME类型,如果服务器无法识别它,那么就让浏览器自己来识别。当Nginx无法识别当前返回的MIME类型时,会采用该参数作为默认值
	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;

	# 开启高效文件传输,建议保持默认的开启状态。Nginx的高效文件传输技术可以让其更快地将文件内容传输到客户端,提高文件传输速度
	sendfile on;

	# 禁用TCP节点推送
	#tcp_nopush     on;

	#keepalive_timeout  0;
	# 客户端保持连接的时间,超时后断开连接。连接复用机制,当客户端发送完请求后,连接还会继续保持一段时间,以便快速发起下一次请求
	keepalive_timeout 65;

	# 开启数据压缩功能
	#gzip  on;	

	server {
		# Nginx监听端口,当有请求到达该端口时,Nginx将会处理该请求。当客户端发送了请求过来后,Nginx会监听到该端口被占用,便会启用该server块去处理该请求
		listen 80;

		# 指定服务端的域名/IP,如果没有域名,则使用IP地址。当Nginx接收到一个请求时,首先会按照请求中的Host(或X-Forwarded-Host)头信息的域名取匹配server_name指令中的值,只要匹配上即可
		server_name localhost;

		# 该行是将字符集设置为koi8-r,koi8-r是一种字符编码格式
		#charset koi8-r;
		# 设置字符集为 utf-8
		charset utf-8;

		#把http的域名请求转成https
		return 301 https://$host$request_uri;
	}

	# 另一个使用 IP、名称和端口的虚拟主机配置
	#
	#server {
	#    listen       8000;
	#    listen       somename:8080;
	#    server_name  somename  alias  another.alias;

	#    location / {
	#        root   html;
	#        index  index.html index.htm;
	#    }
	#}

	# HTTPS 服务器
	#
	server {
		listen 443 ssl;
		server_name localhost;

		# 证书
		ssl_certificate /etc/ssl/124.221.87.224_ssl.crt;
		# 秘钥存储路径
		ssl_certificate_key /etc/ssl/124.221.87.224.private;

		# ssl的一些配置
		ssl_session_cache shared:SSL:1m;
		ssl_session_timeout 5m;
		ssl_prefer_server_ciphers on;
		ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
		# 开启TLS协议
		ssl_protocols TLSv1 TLSv1.1 TLSv1.2;

		# 该行是将字符集设置为koi8-r,koi8-r是一种字符编码格式
		#charset koi8-r;
		# 设置字符集为 utf-8
		charset utf-8;

		# 该行是定义了当前这个server块的访问日志文件的存储位置。其中logs/host.access.log表示存储的目录和文件名,main表示使用标准的日志格式。如果该行没有被注释掉,就会在相应的目录下生成一份日志文件,记录该server块的访问日志
		#access_log  logs/host.access.log  main;

		# URL匹配规则。在Nginx中,URL匹配是由location指令提供的
		location / {
			# 当URL中的路径为空时,会默认从这里找到对应的文件。该块内容的作用是指定处理该请求所使用的文件系统根目录路径
			root /srv/tencent/page/dist;
			# try_files指令将尝试匹配请求的文件,如果找不到,则返回index.html
			try_files $uri $uri/ /index.html;
		}

		# 后端
		location /api/ {
			# 设置代理服务器发送的http请求头中Host的值为接收到的客户端请求头中的Host值
			proxy_set_header Host $http_host;
			# 设置代理服务器发送的http请求头中X-Real-IP的值为当前请求的客户端IP地址
			proxy_set_header X-Real-IP $remote_addr;
			# 设置代理服务器发送的http请求头中REMOTE-HOST的值为当前请求的客户端IP地址
			proxy_set_header REMOTE-HOST $remote_addr;
			# 设置代理服务器发送的http请求头中X-Forwarded-For的值为所有经过的代理服务器IP地址列表,多个IP地址之间用逗号隔开
			proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
			# 将客户端请求通过代理服务器转发到指定地址
			proxy_pass http://127.0.0.1:8080/api/;
			# 设置代理服务器与后端服务器建立连接的超时时间
			proxy_connect_timeout 3600s;
			# 设置代理服务器从后端服务器读取数据的超时时间
			proxy_read_timeout 3600s;
			# 设置代理服务器向后端服务器发送数据的超时时间
			proxy_send_timeout 3600s;
		}

		location /python/ {
			# 设置代理服务器发送的http请求头中Host的值为接收到的客户端请求头中的Host值
			proxy_set_header Host $http_host;
			# 设置代理服务器发送的http请求头中X-Real-IP的值为当前请求的客户端IP地址
			proxy_set_header X-Real-IP $remote_addr;
			# 设置代理服务器发送的http请求头中REMOTE-HOST的值为当前请求的客户端IP地址
			proxy_set_header REMOTE-HOST $remote_addr;
			# 设置代理服务器发送的http请求头中X-Forwarded-For的值为所有经过的代理服务器IP地址列表,多个IP地址之间用逗号隔开
			proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
			# 将客户端请求通过代理服务器转发到指定地址
			proxy_pass http://127.0.0.1:8081/python/;
			# 设置代理服务器与后端服务器建立连接的超时时间
			proxy_connect_timeout 3600s;
			# 设置代理服务器从后端服务器读取数据的超时时间
			proxy_read_timeout 3600s;
			# 设置代理服务器向后端服务器发送数据的超时时间
			proxy_send_timeout 3600s;
		}

		# 配置 404 页面。当请求的文件不存在,或者因为某种原因无法访问到指定的文件时,返回404
		error_page 404 /404.html;

		# 错误页面的配置,当出错时会跳转到该页面。当服务端返回错误状态码时,可以为不同的状态码指定不同的错误页面
		error_page 500 502 503 504 /50x.html;

		# 当请求 URL 精确匹配 /50x.html 时,根据配置路径返回静态页面。配合error_page使用,可以为错误页面指定特定的URI
		location = /50x.html {
			root html;
		}
	}
}

观察可知。我将原本server80里面的跳转配置原封不动的照搬进了server443里,但是有几个地方特别注意,需要改。下面讲讲我做了什么。

2.2.1 将80端口重定向到443

把原来80里面的跳转配置都删掉,然后配置关键在return 301 https://$host$request_uri;

	server {
		# Nginx监听端口,当有请求到达该端口时,Nginx将会处理该请求。当客户端发送了请求过来后,Nginx会监听到该端口被占用,便会启用该server块去处理该请求
		listen 80;

		# 指定服务端的域名/IP,如果没有域名,则使用IP地址。当Nginx接收到一个请求时,首先会按照请求中的Host(或X-Forwarded-Host)头信息的域名取匹配server_name指令中的值,只要匹配上即可
		server_name localhost;

		# 该行是将字符集设置为koi8-r,koi8-r是一种字符编码格式
		#charset koi8-r;
		# 设置字符集为 utf-8
		charset utf-8;

		#把http的域名请求转成https
		return 301 https://$host$request_uri;
	}
2.2.2 端口443配置ssl证书
	server {
		listen 443 ssl;
		server_name localhost;

		# 证书
		ssl_certificate /etc/ssl/124.221.87.224_ssl.crt;
		# 秘钥存储路径
		ssl_certificate_key /etc/ssl/124.221.87.224.private;

		# ssl的一些配置
		ssl_session_cache shared:SSL:1m;
		ssl_session_timeout 5m;
		ssl_prefer_server_ciphers on;
		ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
		# 开启TLS协议
		ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
		-----------这下面照搬原来80的配置-------------------
	}

2.3 启动nginx(这里有坑)

替换掉nginx.conf后,进入文件夹/usr/local/nginx/sbin下,执行验证配置文件是否正确的命令。

./nginx -t

如果你没有报错,那太赞了,那你这一块不用看了,但是我这里爆了一个错😭。

nginx: [emerg] the "ssl" parameter requires ngx_http_ssl_module in /usr/local/nginx/conf/nginx.conf

这里的原因是我最开始安装nginx的时候,可以看下博客CentOS系统环境搭建(十一)——CentOS7安装使用Nginx并部署前后端分离项目,用的命令如下。

./configure

😭这就埋坑了啊!这样安装的nginx是没有http_ssl_module模块的,不支持ssl,所以才导致了报错。

这时候,把你原本的nginx.conf,就是以前http那个的换回去,然后在文件夹/usr/local/nginx/sbin下执行命令先把服务器上的nginx停掉(不换回去执行命令也停不掉)。

./nginx -s stop

记得在你本地备份一下http的nginx.conf文件和https的nginx.conf文件,然后我要卸载nginx。

rm -rf /usr/local/nginx

然后我们重新安装nginx。将原文CentOS系统环境搭建(十一)——CentOS7安装使用Nginx并部署前后端分离项目的./configure换成下面这个命令。其他步骤不用变。

./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module --with-http_v2_module

安装完成后,再将你https的nginx.conf文件放回去,用./nginx -t再试试,我成功了。

成功后,在文件夹/usr/local/nginx/sbin下执行命令重启nginx即可。

./nginx -s reload

到此,nginx对https的配置支持已经完成。

3.一个不用域名用IP的坑

当我高兴的开始把http://124.221.87.224改成https://124.221.87.224往里面点击的时候,却发现浏览器控制台报错Mixed Content: The page at https://* was loaded over HTTPS, but requested an insecure XMLHttpReque,然后我发现除了页面是正常的,后端接口没一个通的。这里要怎么解决呢?

很简单,去你的index主页,我这里原本是<meta http-equiv="X-UA-Compatible" content="IE=edge">,请换成如下标签。

<meta http-equiv="Content-Security-Policy" content="upgrade-insecure-requests"/>

image-20231226002142253

image-20231226002408191

讲解一下,出现Mixed Content: The page at https://* was loaded over HTTPS, but requested an insecure XMLHttpReque是因为浏览器的安全机制,https协议的网站请求http协议的资源被浏览器认为不安全,请求被拦截。然后使用<meta http-equiv="Content-Security-Policy" content="upgrade-insecure-requests"/>会自动将HTTP请求升级成安全的HTTPS请求。这就是它可以解决这个问题的原因。

我在网上搜索的时候,看到说如果你用的是真正的域名,就不会有这个错了,但是我用的只有一个ip,是不是这样呢?我没域名,所以也实验不了,各位网友有域名的可以试试,看看会不会避开这个坑。

至此,我成功的将我的服务器的主页,http://124.221.87.224升级成了https://124.221.87.224。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【三维生成】稀疏重建、Image-to-3D方法(汇总)

系列文章目录 总结一下近5年的三维生成算法&#xff0c;持续更新 文章目录 系列文章目录一、LRM&#xff1a;单图像的大模型重建&#xff08;2023&#xff09;摘要1.前言2.Method3.实验 二、SSDNeRF&#xff1a;单阶段Diffusion NeRF的三维生成和重建&#xff08;ICCV 2023&am…

基于VUE3+Layui从头搭建通用后台管理系统(前端篇)十六:统计报表模块相关功能实现

一、本章内容 本章使用Echarts及DataV实现常用图表、特殊图表、地图及综合图表等图表展示功能。 1. 详细课程地址: https://edu.csdn.net/course/detail/38183 2. 源码下载地址: 点击下载 二、界面预览 三、开发视频 3.1 B站视频地址: 基于VUE3+Layui从

2023.12.25 关于 Redis 数据类型 Hash 常用命令、内部编码、应用场景

目录 Hash 数据类型 Hash 操作命令 HSET HGET HEXISTS HDEL HKEYS HVALS HGETALL HMGET HLEN HSETNX HINCRBY HINCRBYFLOAT HSTRLEN Hash 编码方式 理解什么是压缩 Hash 实际应用 Cache 缓存 Hash 数据类型 整体上来说 Redis 是键值对结构&#xff0c;其中 …

【C++高阶(九)】C++类型转换以及IO流

&#x1f493;博主CSDN主页:杭电码农-NEO&#x1f493;   ⏩专栏分类:C从入门到精通⏪   &#x1f69a;代码仓库:NEO的学习日记&#x1f69a;   &#x1f339;关注我&#x1faf5;带你学习C   &#x1f51d;&#x1f51d; C高阶 1. 前言2. C语言类型转换的方式3. C的强制…

5G阅信在教研行业应用场景有哪些?

1、新生入学 新生录用通知、录用信息查看、注意事项&#xff08;入学指引&#xff09; 校园简介 资讯1 秒速达&#xff0c;让信息传达更高效便捷 2、校务服务 可作为校园微服务的新入口 提供学校各专业课表课程查看、校园卡办理、一卡通应…

怎样在win10命令行窗口跑起来mujava

MuJava简介 Java (muJava) 是 Java 程序的变异系统。 它自动生成用于传统突变测试和类级别突变测试的突变体。 Java 可以测试单个类和多个类的包。 用户以对封装在单独 JUnit 类的方法中的被测类的方法调用序列的形式提供测试。 官网地址&#xff1a;Java Home Page 需要下…

正则表达式与bs4选择器筛选论文数准确率之比较

一、正则爬取论文网首页论文标题的示例 import requests import re from bs4 import BeautifulSoupheaders {User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36}def get_html(url):try:res…

C# 通过SharpCompress.Archives.Rar解压RaR文件

/// <summary>/// 解压一个Rar文件/// </summary>/// <param name"RarFile">需要解压的Rar文件&#xff08;绝对路径&#xff09;</param>/// <param name"TargetDirectory">解压到的目录</param>/// <param name&…

如何将图片(matlab、python)无损放入word论文

许多论文对插图有要求&#xff0c;直接插入png、jpg一般是不行的&#xff0c;这是一篇顶刊文章&#xff08;pdf&#xff09;的插图&#xff0c;放大2400%后依旧清晰&#xff0c;搜罗了网上的方法&#xff0c;总结了一下如何将图片无损放入论文中。 这里主要讨论的是数据生成的图…

渗透测试(Lab4.2)

配置WebDeveloper的时候遇到一个错误 导入失败&#xff0c;因为 E:…ovf 未通过 OVF 规范一致性或虚拟硬件合规性检查。 请单击“重试”放松 OVF 规范与虚拟硬件合规性检查&#xff0c;并重新尝试导入&#xff1b; 或单击“取消”以取消导入。如果重新尝试导入&#xff0c;可能…

[Angular] 笔记 10:服务与依赖注入

什么是 Services & Dependency Injection? chatgpt 回答&#xff1a; 在 Angular 中&#xff0c;Services 是用来提供特定功能或执行特定任务的可重用代码块。它们可以用于处理数据、执行 HTTP 请求、管理应用程序状态等。Dependency Injection&#xff08;依赖注入&#…

w16php系列之基础数组

一、索引数组 概念 索引数组 是指键名为整数的数组。默认情况下&#xff0c;索引数组的键名是从0开始&#xff0c;并依次递增。它主要适用于利用位置&#xff08;0、1、2……&#xff09;来标识数组元素的情况。另外&#xff0c;索引数组的键名也可以自己指定 示例代码 <…

VScode跑通Remix.js官方的contact程序开发过程

目录 1 引言 2 安装并跑起来 3 设置根路由 4 用links来添加风格资源 ​5 联系人路由的UI 6 添加联系人的UI组件 7 嵌套路由和出口 8 类型推理 9 Loader里的URL参数 10 验证参数并抛出响应 书接上回&#xff0c;我们已经跑通了remix的quick start项目&#xff0c;接下…

开源verilog模拟 iverilog verilator +gtkwave仿真及一点区别

开源的 iverilog verilator 和商业软件动不动几G几十G相比&#xff0c;体积小的几乎可以忽略不计。 两个都比较好用&#xff0c;各有优势。 iverilog兼容性好。 verilator速度快。 配上gtkwave 看波形&#xff0c;仿真工具基本就齐了。 说下基本用法 计数器 counter.v module…

HarmonyOS4.0开发该怎么系统学习,适合哪些人?

对于想要系统学习HarmonyOS 4.0开发的人来说&#xff0c;以下是一些建议&#xff1a; 1.了解HarmonyOS基础&#xff1a; 首先&#xff0c;你需要对HarmonyOS有一个基本的了解&#xff0c;包括它的核心概念、系统架构、分布式技术等。可以通过官方文档、教程和在线课程来深入了…

学习笔记15——前端和http协议

学习笔记系列开头惯例发布一些寻亲消息&#xff0c;感谢关注&#xff01; 链接&#xff1a;https://baobeihuijia.com/bbhj/ 关系 客户端&#xff1a;对连接访问到的前端代码进行解析和渲染&#xff0c;就是浏览器的内核服务器端&#xff1a;按照规则编写前端界面代码 解析标准…

园艺伴侣应用程序Plant-it

什么是 Plant-it &#xff1f; Plant-it 是一款园艺伴侣应用程序&#xff0c;可帮助您照顾植物。它不会建议您采取哪些操作&#xff0c;而是旨在记录您正在执行的活动。这是故意的&#xff0c;软件作者坚信&#xff0c;唯一负责知道何时给植物浇水、何时施肥等的人是你&#xf…

HBase深度历险 | 京东物流技术团队

简介 HBase 的全称是 Hadoop Database&#xff0c;是一个分布式的&#xff0c;可扩展&#xff0c;面向列簇的数据库&#xff0c;是一个通过大量廉价的机器解决海量数据的高速存储和读取的分布式数据库解决方案。本文会像剥洋葱一样&#xff0c;层层剥开她的心。 特点 首先我…

GaN HEMT的大信号(RF PA)性能

来源&#xff1a;Novel Drain-Connected Field Plate GaN HEMT Designs for Improved VBD −RON Tradeoff and RF PA Performance (IEEE TRANSACTIONS ON ELECTRON DEVICES) 使用 TCAD 提取的 I-V 和 C-V 曲线族&#xff0c;结合 Keysight 的 IC-CAP 器件建模套件和先进SPICE模…

工具系列:TimeGPT_(2)使用外生变量时间序列预测

文章目录 TimeGPT使用外生变量时间序列预测导入相关工具包预测欧美国家次日电力价格案例 TimeGPT使用外生变量时间序列预测 外生变量在时间序列预测中非常重要&#xff0c;因为它们提供了可能影响预测的额外信息。这些变量可以包括假日标记、营销支出、天气数据或与你正在预测…