CentOS安装netcat工具及测试
下载安装
1 | # 下载 |
如果./configure
报错:configure: error: no acceptable C compiler found in $PATH
,就下载yum install gcc -y
来解决,完事重新执行命令即可。
配置
vim /etc/profile
添加以下内容:
1 | export NETCAT_HOME=/usr/local/netcat-0.7.1 |
保存,退出,并使配置生效:source /etc/profile
测试
nc --help
安装 Docker Compose
前置条件
Docker Compose依赖Docker Engine进行任何有意义的工作,因此请确保本地或远程安装Docker引擎,具体取决于您的设置。
在Mac和Windows版Docker Desktop等桌面系统上,Docker Compose包含在这些桌面安装中。
在Linux系统上,首先按照Get Docker页面上所述为您的操作系统安装Docker引擎,然后回到这里获取有关在Linux系统上安装Compose的说明。
要以非根用户身份运行Compose,请参阅作为非根用户管理Docker。
安装 Compose
按照以下说明在Mac、Windows、Windows Server 2016或Linux系统上安装Compose,或了解使用pip
Python软件包管理器或将Compose安装为容器等替代方案。
安装其他版本
以下说明概述了Compose当前稳定版本(v1.29.2)的安装。要安装其他版本的Compose,请将给定的版本号替换为您想要的版本号。有关在Linux上安装Compose 2.0.0的说明,请参阅在Linux上安装Compose 2.0.0。
编写版本也列出了,并可在GitHub上的Compose存储库发布页面上直接下载。要安装Compose的预发布版本,请参阅安装预发布版本部分。
Install Compose on Linux systems
在Linux上,您可以从GitHub上的Compose存储库发布页面下载Docker Compose二进制文件。按照链接中的说明操作,其中包括在终端中运行curl
命令来下载二进制文件。这些分步说明也包含在下文中。
对于
alpine
,需要以下依赖包:py-pip
、python3-dev
、libffi-dev
、openssl-dev
、gcc
、libc-dev
、rust
、cargo
和make
。
运行此命令下载Docker Compose的当前稳定版本:
1
sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
要安装不同版本的Compose,请将1.29.2替换为要使用的Compose版本。有关如何在Linux上安装Compose 2.2.3的说明,请参阅在Linux上安装Compose 2.0.0
将可执行权限应用于二进制文件:
1
sudo chmod +x /usr/local/bin/docker-compose
笔记:
如果命令docker-compose在安装后失败,请检查您的路径。您还可以创建指向/usr/bin或路径中任何其他目录的符号链接。
例如:
1
sudo ln -s /usr/local/bin/docker-compose /usr/bin/ docker-compose
或者,安装bash和zsh shell的命令完成。
测试安装
1
2docker-compose --version
docker-compose version 1.29.2,build 1110ad01
升级
如果您从Compose 1.2或更低版本升级,请在升级Compose后删除或迁移现有容器。这是因为,从1.3版本开始,Compose使用Docker标签来跟踪容器,并且需要重新创建容器来添加标签。
如果Compose检测到创建的容器没有标签,它就会拒绝运行,这样您就不会最终得到两组容器。如果您想继续使用现有容器(例如,因为它们有您想要保留的数据卷),您可以使用Compose 1.5.x使用以下命令迁移它们:
1 | docker-compose migrate-to-labels |
或者,如果您不担心保留它们,您可以删除它们。创作只是创造新的。
1 | docker container rm -f -v myapp_web_1 myapp_db_1 ... |
卸载
如果您使用curl安装,要卸载Docker Compose:
1 | sudo rm /usr/local/bin/docker-compose |
如果您使用pip安装,要卸载Docker Compose:
1 | pip uninstall docker-compose |
收到“Permission denied”错误?
如果您使用上述任一方法收到“权限被拒绝”错误,您可能没有删除
docker-compose
的正确权限。要强制删除,请将sudo
放在上述任一命令之前,然后再次运行。
CentOS 安装与升级 Docker
卸载老版本和依赖项
1 | sudo yum remove docker \ |
保留/var/lib/docker/的内容,包括图像、容器、卷和网络。Docker Engine软件包现在被称为docker-ce。
使用存储库安装
在新主机上首次安装Docker引擎之前,您需要设置Docker存储库。之后,您可以从存储库安装和更新Docker。
设置存储库
安装yum-utils
软件包(提供yum-config-manager
实用程序)并设置稳定
的存储库。
1 | sudo yum install -y yum-utils |
可选的:开启夜间版本或测试版本存储库
这些存储库包含在上面的docker.repo文件中,但默认情况下被禁用。您可以将它们与稳定的存储库一起启用。以下命令启用夜间存储库。sudo yum-config-manager --enable docker-ce-nightly
要启用测试通道,请运行以下命令:sudo yum-config-manager --enable docker-ce-test
您可以通过运行带有--disable
标志的yum-config-manager
命令来禁用夜间或测试存储库。要重新启用它,请使用--enable
标志。以下命令将禁用夜间存储库。sudo yum-config-manager --disable docker-ce-nightly
安装Docker引擎
- 安装最新版本的Docker引擎和容器化,或转到下一步安装特定版本:如果系统提示接受GPG密钥,请验证指纹是否匹配
1
sudo yum install docker-ce docker-ce-cli containerd.io
060A 61C5 1B55 8A7F 742B 77AA C52F EB6B 621E 9F35
,如果是,请接受。
有多个Docker存储库吗?
如果您启用了多个Docker存储库,则在
yum install
或yum update
命令中不指定版本的情况下安装或更新始终安装尽可能高的版本,这可能不适合您的稳定性需求。
此命令安装Docker,但它不会启动Docker。它还创建一个docker组,但是,默认情况下,它不会向组添加任何用户。
要安装特定版本的Docker Engine,请在回购协议中列出可用版本,然后选择并安装:
a. 列出并排序回购协议中可用的版本。此示例按版本号对结果进行排序,从最高到最低,并被截断:
1
2
3
4
5
6yum list docker-ce --showduplicates sort -r
docker-ce.x86_64 3:18.09.1-3.e17 docker-ce-stable
docker-ce.x86_64 3:18.09.0-3.e17 docker-ce-stable
docker-ce.x86_64 18.06.1.ce-3.e17 docker-ce-stable
docker-ce.x86_64 18.06.0.ce-3.e17 docker-ce-stable返回的列表取决于启用了哪些存储库,并且特定于您的CentOS版本(由本示例中的.el7后缀表示)。
b. 通过其完全限定的软件包名称安装特定版本,即软件包名称(
docker-ce
)加上版本字符串(第2列),从第一个冒号(:
)开始,直到第一个连字符,由连字符(-
)分隔。例如,docker-ce-18.09.1
。1
$ sudo yum install docker-ce-<VERSION_STRING> docker-ce-cli-<VERSION_STRING> containerd.io
此命令安装Docker,但它不会启动Docker。它还创建一个docker组,但是,默认情况下,它不会向组添加任何用户。
开启Docker
1
sudo systemctl start docker
通过运行
hello-world
映像来验证Docker引擎是否正确安装。1
sudo docker run hello-world
此命令下载测试映像并在容器中运行。当容器运行时,它会打印消息并退出。
这安装并运行Docker引擎。使用sudo
运行Docker命令。继续Linux postinstall,允许非特权用户运行Docker命令和其他可选配置步骤。
升级Docker引擎
要升级Docker引擎,请按照安装说明,选择要安装的新版本。
从软件包安装
如果您无法使用Docker的存储库来安装Docker,您可以下载发布版本的.rpm
文件并手动安装。每次想要升级Docker引擎时,您都需要下载一个新文件。
- 转到https://download.docker.com/linux/centos/并选择您的CentOS版本。然后浏览到
x86_64/stable/Packages/
,并下载您要安装的Docker版本的.rpm
文件。笔记
To install a nightly or test (pre-release) package, change the word stable in the above URL to nightly or test. Learn about nightly and test channels. - 安装Docker引擎,将下面的路径更改为下载Docker软件包的路径。 Docker已安装,但尚未启动。创建了
1
安装Docker引擎,将下面的路径更改为下载Docker软件包的路径。
docker
组,但没有将用户添加到组中。 - 开启Docker
1
sudo systemctl start docker
- 通过运行
hello-world
映像来验证Docker引擎是否正确安装。此命令下载测试映像并在容器中运行。当容器运行时,它会打印消息并退出。1
sudo docker run hello-world
这安装并运行Docker引擎。使用sudo
运行Docker命令。继续Linux postinstall,允许非特权用户运行Docker命令和其他可选配置步骤。
升级Docker引擎
要升级Docker引擎,请下载较新的软件包文件并重复安装过程,使用yum -y
升级而不是yum -y
安装,然后指向新文件。
卸载Docker引擎
卸载Docker Engine、CLI和Containerd软件包:
1
sudo yum remove docker-ce docker-ce-cli containerd.io
主机上的图像、容器、卷或自定义配置文件不会自动删除。要删除所有图像、容器和卷:
1
2sudo rm -rf /var/lib/docker
sudo rm -rf /var/lib/containerd
您必须手动删除任何编辑过的配置文件。
MathJax数学公式渲染测试
Simple Equations
$$\begin{equation} \label{eq1}
e=mc^2
\end{equation}$$
Multi-line Equations
$$\begin{equation} \label{eq2}
\begin{aligned}
a &= b + c \
&= d + e + f + g \
&= h + i
\end{aligned}
\end{equation}$$
Multiple Aligned Equations
$$\begin{align}
a &= b + c \label{eq3} \
x &= yz \label{eq4} \
l &= m - n \label{eq5}
\end{align}$$
Exclude Equations from Numbering
$$\begin{align}
-4 + 5x &= 2 + y \nonumber \
w + 2 &= -1 + w \
ab &= cb
\end{align}$$
Use \tag
to Tag Equations
$$x+1\over\sqrt{1-x^2} \tag{i}\label{eq_tag}$$
安装使用frp客户端
下载对应客户端包
- https://github.com/fatedier/frp/releases
- https://github.com/fatedier/frp/releases/download/v0.42.0/frp_0.42.0_linux_amd64.tar.gz
1 | curl -LO https://github.com/fatedier/frp/releases/download/v0.42.0/frp_0.42.0_linux_amd64.tar.gz |
解压压缩包
tar -zxvf frp_0.38.0_linux_amd64.tar.gz
安装
sudo cp frp_0.38.0_linux_amd64/frpc /usr/bin/
sudo mkdir /etc/frp
sudo cp frp_0.38.0_linux_amd64/frpc.ini /etc/frp/
sudo cp frp_0.38.0_linux_amd64/systemd/frpc.service /etc/systemd/system/
编辑简单配置文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
[common]
server_addr = my.domain
server_port = 7000
admin_addr = 127.0.0.1
admin_port = 9000
admin_user = admin
admin_pwd = admin111111
# tcp_name 可以自由设置
[tcp_name_1]
type=tcp
local_port = 9000
remote_port = 9000
[tcp_name_2]
type = tcp
local_ip = 127.0.0.1
local_port = 22
remote_port = 822
# http_name 可以自由设置
[http_name]
type = http
local_port = 80
use_encryption = false
use_compression = true
subdomain = subdomain
开启和开机启动
sudo systemctl start frpc
sudo systemctl enable frpc
service
frpc.service
1 | [Unit] |
frps.service
1 | [Unit] |
参考
Linux防火墙及开发端口管理
查看防火墙是否开启
1 | systemctl status firewalld |
若没有开启则是关闭状态
1 | systemctl start firewalld # 关闭则start改为stop |
查看所有开启的端口
1 | firewall-cmd --list-ports |
防火墙开启端口访问
1 | firewall-cmd --zone=public --add-port=80/tcp --permanent |
重启命令
1 | firewall-cmd --reload |
其他常用命令
1 | firewall-cmd --state ##查看防火墙状态,是否是running |
示例
- 开放端口
firewall-cmd --zone=public --add-port=5672/tcp --permanent
# 开放5672端口
firewall-cmd --zone=public --remove-port=5672/tcp --permanent
#关闭5672端口
firewall-cmd --reload
# 配置立即生效 - 查看防火墙所有开放的端口
firewall-cmd --zone=public --list-ports
- 关闭防火墙
如果要开放的端口太多,嫌麻烦,可以关闭防火墙,安全性自行评估
systemctl stop firewalld.service
- 查看防火墙状态
firewall-cmd --state
- 查看监听的端口
netstat -lnpt
- 检查端口被哪个进程占用
netstat -lnpt |grep 5672
- 查看进程的详细信息
ps 6832
- 中止进程
kill -9 6832
参考
路径规则与反向代理、负载均衡配置
location uri 正则表达式
.
:匹配除换行符以外的任意字符?
:重复0次或1次+
:重复1次或更多次*
:重复0次或更多次\d
:匹配数字^
:匹配字符串的开始$
:匹配字符串的结束{n}
:重复n次{n,}
:重复n次或更多次[c]
:匹配单个字符c[a-z]
:匹配a-z小写字母的任意一个(a|b|c)
: 属线表示匹配任意一种情况,每种情况使用竖线分隔,一般使用小括号括括住,匹配符合a字符 或是b字符 或是c字符的字符串\
反斜杠:用于转义特殊字符小括号()之间匹配的内容,可以在后面通过$1来引用,$2表示的是前面第二个()里的内容。正则里面容易让人困惑的是\转义特殊字符。
location 路径映射
1 | http { |
自定义变量使用set指令,语法 set 变量名值;引用使用变量名值;引用使用变量名; 这里自定义了doc_root变量。
静态服务器location的映射一般有两种方式:
- 使用路径,如 /images/ 一般图片都会放在某个图片目录下,
- 使用后缀,如 .jpg、.png 等后缀匹配模式
访问http://localhost/test.jpg
会映射到 $doc_root/img
访问http://localhost/images/test.jpg
当同一个路径满足多个location
时,优先匹配优先级高的location
,由于^~
的优先级大于 ~
, 所以会走/images/
对应的location
常见的location
路径映射路径有以下几种:
=
进行普通字符精确匹配。也就是完全匹配。^~
前缀匹配。如果匹配成功,则不再匹配其他location。~
表示执行一个正则匹配,区分大小写~*
表示执行一个正则匹配,不区分大小写/xxx/
常规字符串路径匹配/
通用匹配,任何请求都会匹配到
location 优先级
当一个路径匹配多个location时究竟哪个location能匹配到时有优先级顺序的,而优先级的顺序于location值的表达式类型有关,和在配置文件中的先后顺序无关。相同类型的表达式,字符串长的会优先匹配。
以下是按优先级排列说明:
- 等号类型(=)的优先级最高。一旦匹配成功,则不再查找其他匹配项,停止搜索。
^~
类型表达式,不属于正则表达式。一旦匹配成功,则不再查找其他匹配项,停止搜索。- 正则表达式类型
(~ ~*)
的优先级次之。如果有多个 location 的正则能匹配的话,则使用正则表达式最长的那个。 - 常规字符串匹配类型。按前缀匹配。
/
通用匹配,如果没有匹配到,就匹配通用的
优先级搜索问题:不同类型的location映射决定是否继续向下搜索
- 等号类型、
^~
类型:一旦匹配上就停止搜索了,不会再匹配其他location了 - 正则表达式类型
(~ ~*)
,常规字符串匹配类型/xxx/
: 匹配到之后,还会继续搜索其他其它location,直到找到优先级最高的,或者找到第一种情况而停止搜索
location优先级从高到底:
(location =
) > (location 完整路径
) > (location ^~ 路径
) > (location ~,~* 正则顺序
) > (location 部分起始路径
) > (/
)
1 | location = / { |
注意:location的优先级与location配置的位置无关
反向代理
反向代理通过proxy_pass
指令来实现。
启动一个Java Web项目,端口号为8081
1 | server { |
当我们访问localhost的时候,就相当于访问 localhost:8081
了
负载均衡
RR(round robin :轮询 默认)
每个请求按时间顺序逐一分配到不同的后端服务器,也就是说第一次请求分配到第一台服务器上,第二次请求分配到第二台服务器上,如果只有两台服务器,第三次请求继续分配到第一台上,这样循环轮询下去,也就是服务器接收请求的比例是 1:1, 如果后端服务器down掉,能自动剔除。轮询是默认配置,不需要太多的配置
同一个项目分别使用8081和8082端口启动项目
1 | upstream web_servers { |
访问地址仍然可以获得响应 http://localhost/api/user/login?username=zhangsan&password=111111
,这种方式是轮询的
权重
指定轮询几率,weight和访问比率成正比, 也就是服务器接收请求的比例就是各自配置的weight的比例,用于后端服务器性能不均的情况,比如服务器性能差点就少接收点请求,服务器性能好点就多处理点请求。
1 | upstream test { |
示例是4次请求只有一次被分配到8081上,其他3次分配到8082上。backup是指热备,只有当8081和8082都宕机的情况下才走8083
ip_hash
上面的2种方式都有一个问题,那就是下一个请求来的时候请求可能分发到另外一个服务器,当我们的程序不是无状态的时候(采用了session保存数据),这时候就有一个很大的很问题了,比如把登录信息保存到了session中,那么跳转到另外一台服务器的时候就需要重新登录了,所以很多时候我们需要一个客户只访问一个服务器,那么就需要用iphash了,iphash的每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。
1 | upstream test { |
fair(第三方)
按后端服务器的响应时间来分配请求,响应时间短的优先分配。这个配置是为了更快的给用户响应
1 | upstream backend { |
url_hash(第三方)
按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,后端服务器为缓存时比较有效。在upstream中加入hash语句,server语句中不能写入weight等其他的参数,hash_method是使用的hash算法
1 | upstream backend { |
以上5种负载均衡各自适用不同情况下使用,所以可以根据实际情况选择使用哪种策略模式,不过fair和url_hash需要安装第三方模块才能使用。
动静分离
动静分离是让动态网站里的动态网页根据一定规则把不变的资源和经常变的资源区分开来,动静资源做好了拆分以后,我们就可以根据静态资源的特点将其做缓存操作,这就是网站静态化处理的核心思路。
1 | upstream web_servers { |
其他
return指令
返回http状态码 和 可选的第二个参数可以是重定向的URL
1 | location /permanently/moved/url { |
rewrite指令
重写URI请求 rewrite,通过使用rewrite指令在请求处理期间多次修改请求URI,该指令具有一个可选参数和两个必需参数。
第一个(必需)参数是请求URI必须匹配的正则表达式。
第二个参数是用于替换匹配URI的URI。
可选的第三个参数是可以停止进一步重写指令的处理或发送重定向(代码301或302)的标志
1 | location /users/ { |
error_page指令
使用error_page指令,您可以配置NGINX返回自定义页面以及错误代码,替换响应中的其他错误代码,或将浏览器重定向到其他URI。在以下示例中,error_page指令指定要返回404页面错误代码的页面(/404.html)。
1 | error_page 404 /404.html; |
日志
访问日志:需要开启压缩 gzip on; 否则不生成日志文件,打开log_format
、access_log
注释
1 | log_format main '$remote_addr - $remote_user [$time_local] "$request" ' |
deny 指令
1 | # 禁止访问某个目录 |
内置变量
nginx的配置文件中可以使用的内置变量以美元符$
开始,也有人叫全局变量。其中,部分预定义的变量的值是可以改变的。
作者:Java编程宇宙
链接:https://www.zhihu.com/question/21483073/answer/2252761291
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
$args
:#这个变量等于请求行中的参数,同$query_string
$content_length
:请求头中的Content-length字段。$content_type
:请求头中的Content-Type字段。$document_root
:当前请求在root指令中指定的值。$host
:请求主机头字段,否则为服务器名称。$http_user_agent
:客户端agent信息$http_cookie
:客户端cookie信息$limit_rate
:这个变量可以限制连接速率。$request_method
:客户端请求的动作,通常为GET或POST。$remote_addr
:客户端的IP地址。$remote_port
:客户端的端口。$remote_user
:已经经过Auth Basic Module验证的用户名。$request_filename
:当前请求的文件路径,由root或alias指令与URI请求生成。$scheme
:HTTP方法(如http,https)。$server_protocol
:请求使用的协议,通常是HTTP/1.0或HTTP/1.1。$server_addr
:服务器地址,在完成一次系统调用后可以确定这个值。$server_name
:服务器名称。$server_port
:请求到达服务器的端口号。$request_uri
:包含请求参数的原始URI,不包含主机名,如:”/foo/bar.php?arg=baz
”。$uri
:不带请求参数的当前URI,$uri不包含主机名,如”/foo/bar.html
”。$document_uri
:与$uri相同
CentOS安装Nginx
Install the prerequisites:
sudo yum install yum-utils
To set up the yum repository, create the file named
/etc/yum.repos.d/nginx.repo
with the following contents:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true
[nginx-mainline]
name=nginx mainline repo
baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/
gpgcheck=1
enabled=0
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=trueTo install nginx, run the following command:
sudo yum install nginx
When prompted to accept the GPG key, verify that the fingerprint matches573B FD6B 3D8F BC64 1079 A6AB ABF5 BD82 7BD9 BF62
, and if so, accept it.(option) By default, the repository for stable nginx packages is used. If you would like to use mainline nginx packages, run the following command:
sudo yum-config-manager --enable nginx-mainline