SSH服务器免密登录、反向代理、负载均衡、动静分离、页面压缩、跨域、Nginx配置文件语法

一、SSH服务器免密登录:配置公钥私钥,通过VScode进行连接服务器

成功结果预览

例子:
成功以后可以通过以下命令直接的登录
ssh root@IP地址 -p 22
ssh [email protected] -p 22

请添加图片描述

请添加图片描述

每次通过ssh登陆远程服务器都要输入用户名和密码,很麻烦,比如:

我们可以通过公钥的方式,无密码登陆远程服务器。

ssh 用户名@192.168.xxx.xxx -p 22

第一步,ssh-keygen命令生成公钥私钥

1、注意:服务器配置修改(非root用户可跳过)

很多服务器为了安全不允许root免密登陆,如果你需要root免密登录,需要修改服务器的ssh配置文件
如果你是公司服务器,请不要做此操作

sudo vi /etc/ssh/sshd_config

修改以下参数,有#号的去掉前面的#号

PermitRootLogin yes
PermitEmptyPasswords yes

然后重启ssh服务

service sshd restart

2、做完注意事项就可以进行,生成公钥的过程

如下图,全过程有三步,

请添加图片描述
在这里插入图片描述

第一步是输入公钥私钥的保存路径

第二步和第三步是设置私钥密码和确认密码。

**注意:如果是第一次生成公钥,则直接一路回车确认就行。**公钥和私钥会自动生成到/Users/用户名/.ssh路径下。默认公钥文件名为id_rsa.pub,私钥文件名为id_rsa。

如果不想覆盖之前已有的公钥,那在第一步指定一个保存路径即可。

#生成id_rsa id_rsa.pub 一个公钥一个私钥
ssh-keygen -t rsa

#将公钥上传到服务器
ssh-copy-id root@< you ip addr >

#在服务器.ssh目录下创建认证文件authorized_keys,并将公钥写入authorized_keys
cat id_rsa.pub >> authorized_keys

#现在可通过 ssh root@< you ip addr > 直接登陆服务器

注意
如果手动指定了公钥的路径或文件名,需要手动将公钥上传到服务器的~/.ssh目录下,如:

scp ~/.ssh/centos_id_rsa.pub root@< you ip addr >:~/.ssh

ssh-keygen常用参数

-t:指定生成密钥的类型,默认使用SSH2d的rsa
-f:指定生成密钥的文件名,默训id_rsa(私钥id_rsa,公钥id_rsa.pub)
-P:提供旧密码,空表示不需要密码
-N:提供新密码,空表示不需要密码
-b:指定密钥长度 (bits),RSA最小要求768位,默认是2048位;DSA密钥必须是1024位 (FIPS 1862标准规定)
-C:提供一个新注释
-R hostname:从known_host(第一次连接时就会在~/.ssh目录下生产该密钥文件)文件中删除所有属于hostname的密钥

第二步,使用ssh-copy-id命令将公钥复制到远程服务器

在用户路径下,执行命令:

ssh-copy-id -i .ssh/id_rsa.pub 用户名@192.168.xxx.xxx

注意:如果上一步你自己指定了单独的公钥路径,请在-i后面输入指定的公钥路径。

这里是将你的公钥同步到远程服务器上你要登录的用户名,所以只会对该用户登录时有效。

本质上,这一步的操作,是将你的公钥追加到服务器/home/[用户名]/.ssh/authorized_keys文件后面。如果你手动复制进去,也可以,但是麻烦哦。

第三步,检查服务端.ssh/的权限

以上配置之后,就可以无需密码直接登陆了,命令:

ssh 用户名@192.168.xxx.xxx

如果无效,则需要检查服务器.ssh/文件的权限。如果用户组权限有写权限,则用公钥ssh登录是不生效的。需要去除掉用户组的写权限,使用命令:

chmod g-w ./.ssh/

为什么有这个限制呢?其实思考一下就能理解。因为你想通过公钥快捷登录A用户。而实现方式是将自己的公钥追加到A用户目录下的authorized_keys。这种情况下,如果同用户组的B用户,也有对.ssh/路径下的写权限,那么其他人就可以通过登录B用户,修改A用户下的authorized_keys,将自己的公钥追加进去,这样就可以直接用A用户登录了。所以这会出现漏洞。

第四步,配置快捷命令

目前为止,登录还需要输入用户名和ip,依旧比较麻烦。我们可以在本地的.ssh/config文件中,配置快捷登录命令。

将以下格式的信息追加到config文件后面:

Host [你能记住的名字]
 
Hostname [ip]
 
Port [端口]
 
User [登录用户名]

例如:

配置文件

本机创建ssh登陆配置

cd ~/.ssh
cat >config <<EOF
    Host centos
    	Hostname	172.16.225.37
    	Port		22
    	User		root
    	IdentityFile	~/.ssh/centos_id_rsa
    Host centos
    	Hostname	172.16.225.37
    	Port		22
    	User		herff
    	IdentityFile	~/.ssh/centos_id_rsa
    EOF

- cenos 主机别名(可以取代IP用作登陆,见下面的效果演示)
- Hostname IP地址或网址(换成你服务器的IP)
- Port 端口(生产环境的端口不可能是22,请根据实际情况需要)
- Use 用户名,如果本机用户名与远程不一致,要创建两个
- IdentityFile 本机的公钥路径(注意修改过的文件)

配置完成试试效果

ssh centos或ssh [email protected] -p 22
#➜  ~  ssh centos
#Last login: Sat Dec 11 17:16:06 2021 from gateway
#[root@centos7 ~]# 

完美~

二、Nginx学习笔记

1. 目录结构

  • conf配置文件
  • html默认的配置文件存放路径
  • sbin主程序运行所在目录

2. 配置

  • 一个server块监听一个服务,可以设置监听的IP域名和端口
    • servername匹配顺序,写在前面的匹配上就不会继续往下匹配,可以配置多个域名
  • server块中的location可以设置,对应匹配路径
server {
	listen 80; # 监听端口号
	server_name localhost;  # 主机名
	location / {  # 匹配路径
		root html; 文件根目录
		index index.html index.htm; # 默认页名称	
	}
	error_page 500 502 503 504 /50x.html; # 报错编码对应页面
		location = /50x.html {
		root html;
	}
}

2.1 location匹配

  • /所有请求
  • =精确匹配
  • ~正则匹配,区分大小写
  • ~*正则,不区分大小写
  • ^~非正则匹配
  • “=”匹配 > “^~”匹配 > 正则匹配 > 普通(最大前缀匹配)

3. 反向代理

location / {
	proxy_pass http://127.0.0.1:8080;
}

4. 负载均衡

  • 默认下使用轮询方式,挨个转发
upstream gainfortune {
    server 192.168.3.18:8080;
    server 192.168.3.125:8080;
    server 192.168.3.123:8080;
    server 192.168.3.178:8080;
}

server {

	# ...
	
    location / {
    	# 反向代理
        proxy_pass http://gainfortune;
    }
}

4.1 weight

  • 设置权重,适用后台服务器性能不均的情况
  • weight值越高,权重越高
  • down当前服务暂时不参与
  • backup其它服务down或忙时,访问
upstream gainfortune {
    server 192.168.3.18:8080 weight=3;
    server 192.168.3.125:8080 weight=1 down;
    server 192.168.3.123:8080 weight=5;
    server 192.168.3.178:8080 weight=1 backup;
}

5. 动静分离

  • 将动态请求,代理到后台服务器,静态文件请求,不代理
  • 使用location的正则表达式匹配
# 动静分离
location ~*/(202109|202110|202111|css|fonts|images|js) {
    root /usr/local/nginx/static;
}

6. 页面压缩

gzip on;
gzip_min_length 1k;
gzip_buffers 4 64k;
gzip_http_version 1.1;
gzip_comp_level 6;
gzip_vary on;
gzip_types text/plain text/javascript application/x-javascript text/css text/xml application/xml image/jpg image/jpeg image/png;

7. 跨域

add_header Access-Control-Allow-Origin *;
add_header Access-Control-Allow-Credentials true;
add_header Access-Control-Allow-Methods GET,POST,PUT,DELETE;

8.Nginx配置文件语法

正则表达式

location [ = | ~ | ~* | ^~ ] uri {
    
    

}
  • = :用于不含正则表达式的 uri 前,要求请求字符串与 uri 严格匹配, 如果匹配成功,就停止继续向下搜索并立即处理该请求。
  • ~:用于表示 uri 包含正则表达式,并且区分大小写。
  • ~*:用于表示 uri 包含正则表达式,并且不区分大小写。
  • ^~:用于不含正则表达式的 uri 前,要求 Nginx 服务器找到标识 uri 和请求

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_48053866/article/details/127164423
今日推荐