一、创建临时分支

创建一个临时分支,并且将这个分支checkout。

1
git checkout --orphan temp_branch

二、提交文件到临时分支

将现在所有文件提交到临时分支中。

1
2
git add -A
git commit -am "删除所有的提交记录"

三、 删除master分支

1
git branch -D master

四、重命名分支

将临时分支重命名为master分支

1
git branch -m master

五、更新仓库

1
git push -f origin master

参考

下载安装

1
2
3
4
5
6
7
8
9
# 下载
wget https://sourceforge.net/projects/netcat/files/netcat/0.7.1/netcat-0.7.1.tar.gz
# 解压
tar -zxvf netcat-0.7.1.tar.gz -C /usr/local
cd /usr/local
# 安装
cd /usr/local/netcat-0.7.1
./configure
make && make install

如果./configure报错:configure: error: no acceptable C compiler found in $PATH,就下载yum install gcc -y来解决,完事重新执行命令即可。

配置

vim /etc/profile
添加以下内容:

1
2
export NETCAT_HOME=/usr/local/netcat-0.7.1
export PATH=$PATH:$NETCAT_HOME/bin

保存,退出,并使配置生效:
source /etc/profile

测试

nc --help

前置条件

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-pippython3-devlibffi-devopenssl-devgcclibc-devrustcargomake

  1. 运行此命令下载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

  2. 将可执行权限应用于二进制文件:

    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
  3. 或者,安装bash和zsh shell的命令完成

  4. 测试安装

    1
    2
    docker-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放在上述任一命令之前,然后再次运行。

卸载老版本和依赖项

1
2
3
4
5
6
7
8
sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine

保留/var/lib/docker/的内容,包括图像、容器、卷和网络。Docker Engine软件包现在被称为docker-ce。

使用存储库安装

在新主机上首次安装Docker引擎之前,您需要设置Docker存储库。之后,您可以从存储库安装和更新Docker。

设置存储库

安装yum-utils软件包(提供yum-config-manager实用程序)并设置稳定的存储库。

1
2
3
4
5
sudo yum install -y yum-utils

sudo yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo

可选的:开启夜间版本或测试版本存储库
这些存储库包含在上面的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引擎

  1. 安装最新版本的Docker引擎和容器化,或转到下一步安装特定版本:
    1
    sudo yum install docker-ce docker-ce-cli containerd.io
    如果系统提示接受GPG密钥,请验证指纹是否匹配060A 61C5 1B55 8A7F 742B 77AA C52F EB6B 621E 9F35,如果是,请接受。

有多个Docker存储库吗?

如果您启用了多个Docker存储库,则在yum installyum update命令中不指定版本的情况下安装或更新始终安装尽可能高的版本,这可能不适合您的稳定性需求。

此命令安装Docker,但它不会启动Docker。它还创建一个docker组,但是,默认情况下,它不会向组添加任何用户。

  1. 要安装特定版本的Docker Engine,请在回购协议中列出可用版本,然后选择并安装:

    a. 列出并排序回购协议中可用的版本。此示例按版本号对结果进行排序,从最高到最低,并被截断:

    1
    2
    3
    4
    5
    6
    yum 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组,但是,默认情况下,它不会向组添加任何用户。

  2. 开启Docker

    1
    sudo systemctl start docker
  3. 通过运行hello-world映像来验证Docker引擎是否正确安装。

    1
    sudo docker run hello-world

    此命令下载测试映像并在容器中运行。当容器运行时,它会打印消息并退出。

这安装并运行Docker引擎。使用sudo运行Docker命令。继续Linux postinstall,允许非特权用户运行Docker命令和其他可选配置步骤。

升级Docker引擎

要升级Docker引擎,请按照安装说明,选择要安装的新版本。

从软件包安装

如果您无法使用Docker的存储库来安装Docker,您可以下载发布版本的.rpm文件并手动安装。每次想要升级Docker引擎时,您都需要下载一个新文件。

  1. 转到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.

  2. 安装Docker引擎,将下面的路径更改为下载Docker软件包的路径。
    1
    安装Docker引擎,将下面的路径更改为下载Docker软件包的路径。
    Docker已安装,但尚未启动。创建了docker组,但没有将用户添加到组中。
  3. 开启Docker
    1
    sudo systemctl start docker
  4. 通过运行hello-world映像来验证Docker引擎是否正确安装。
    1
    sudo docker run hello-world
    此命令下载测试映像并在容器中运行。当容器运行时,它会打印消息并退出。

这安装并运行Docker引擎。使用sudo运行Docker命令。继续Linux postinstall,允许非特权用户运行Docker命令和其他可选配置步骤。

升级Docker引擎

要升级Docker引擎,请下载较新的软件包文件并重复安装过程,使用yum -y升级而不是yum -y安装,然后指向新文件。

卸载Docker引擎

  1. 卸载Docker Engine、CLI和Containerd软件包:

    1
    sudo yum remove docker-ce docker-ce-cli containerd.io
  2. 主机上的图像、容器、卷或自定义配置文件不会自动删除。要删除所有图像、容器和卷:

    1
    2
    sudo rm -rf /var/lib/docker
    sudo rm -rf /var/lib/containerd

您必须手动删除任何编辑过的配置文件。

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}$$

下载对应客户端包

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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[Unit]
Description=Frp Client Service
After=network.target

[Service]
Type=simple
User=nobody
Restart=on-failure
RestartSec=5s
ExecStart=/usr/bin/frpc -c /etc/frp/frpc.ini
ExecReload=/usr/bin/frpc reload -c /etc/frp/frpc.ini
LimitNOFILE=1048576

[Install]
WantedBy=multi-user.target

frps.service

1
2
3
4
5
6
7
8
9
10
11
12
13
14
[Unit]
Description=Frp Server Service
After=network.target

[Service]
Type=simple
User=nobody
Restart=on-failure
RestartSec=5s
ExecStart=/usr/bin/frps -c /etc/frp/frps.ini
LimitNOFILE=1048576

[Install]
WantedBy=multi-user.target

参考

查看防火墙是否开启

1
systemctl status firewalld

若没有开启则是关闭状态

1
systemctl start firewalld   # 关闭则start改为stop

查看所有开启的端口

1
2
3
firewall-cmd --list-ports

# 注:启动防火墙后,默认没有开启任何端口,需要手动开启端口

防火墙开启端口访问

1
2
3
4
5
6
7
8
9
firewall-cmd --zone=public --add-port=80/tcp --permanent
firewall-cmd --zone=public --add-port=2379-2380/tcp --permanent
firewall-cmd --zone=public --add-port=80/tcp --add-port=8080/tcp --permanent
# 命令含义:
# --zone #作用域
# --add-port=80/tcp #添加端口,格式为:端口/通讯协议; 开放范围端口用-连接; 使用多个add-port同时开放多个端口
# --permanent #永久生效,没有此参数重启后失效

# 注:开启后需要重启防火墙才生效

重启命令

1
firewall-cmd --reload

其他常用命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
firewall-cmd --state                          ##查看防火墙状态,是否是running
firewall-cmd --reload ##重新载入配置,比如添加规则之后,需要执行此命令
firewall-cmd --get-zones ##列出支持的zone
firewall-cmd --get-services ##列出支持的服务,在列表中的服务是放行的
firewall-cmd --query-service ftp ##查看ftp服务是否支持,返回yes或者no
firewall-cmd --add-service=ftp ##临时开放ftp服务
firewall-cmd --add-service=ftp --permanent ##永久开放ftp服务
firewall-cmd --remove-service=ftp --permanent ##永久移除ftp服务
firewall-cmd --add-port=80/tcp --permanent ##永久添加80端口
firewall-cmd --remove-port=80/tcp --permanent ##永久移除80端口
firewall-cmd --zone=public --list-ports ##查看已开放的端口

iptables -L -n ##查看规则,这个命令是和iptables的相同的
man firewall-cmd

示例

  1. 开放端口
    firewall-cmd --zone=public --add-port=5672/tcp --permanent # 开放5672端口
    firewall-cmd --zone=public --remove-port=5672/tcp --permanent #关闭5672端口
    firewall-cmd --reload # 配置立即生效
  2. 查看防火墙所有开放的端口
    firewall-cmd --zone=public --list-ports
  3. 关闭防火墙
    如果要开放的端口太多,嫌麻烦,可以关闭防火墙,安全性自行评估
    systemctl stop firewalld.service
  4. 查看防火墙状态
    firewall-cmd --state
  5. 查看监听的端口
    netstat -lnpt
  6. 检查端口被哪个进程占用
    netstat -lnpt |grep 5672
  7. 查看进程的详细信息
    ps 6832
  8. 中止进程
    kill -9 6832

参考

https://www.cnblogs.com/niuben/p/13882092.html

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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
http {
server {
listen 80;
server_name localhost;


set $doc_root /usr/local/var/www;

# 默认location
location / {
root /usr/local/var/www/html;
index index.html index.htm;
}

location ^~ /images/ {
root $doc_root;
}

location ~* \.(gif|jpg|jpeg|png|bmp|ico|swf|css|js)$ {
root $doc_root/img;
}
}
}

自定义变量使用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
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
28
29
30
31
32
33
34
35
36
37
38
location = / {
# 精确匹配/,主机名后面不能带任何字符串 /
[ configuration A ]
}
location / {
# 匹配所有以 / 开头的请求。
# 但是如果有更长的同类型的表达式,则选择更长的表达式。
# 如果有正则表达式可以匹配,则优先匹配正则表达式。
[ configuration B ]
}
location /documents/ {
# 匹配所有以 /documents/ 开头的请求,匹配符合以后,还要继续往下搜索。
# 但是如果有更长的同类型的表达式,则选择更长的表达式。
# 如果有正则表达式可以匹配,则优先匹配正则表达式。
[ configuration C ]
}
location ^~ /images/ {
# 匹配所有以 /images/ 开头的表达式,如果匹配成功,则停止匹配查找,停止搜索。
# 所以,即便有符合的正则表达式location,也不会被使用
[ configuration D ]
}

location ~* \.(gif|jpg|jpeg)$ {
# 匹配所有以 gif jpg jpeg结尾的请求。
# 但是 以 /images/开头的请求,将使用 Configuration D,D具有更高的优先级
[ configuration E ]
}

location /images/ {
# 字符匹配到 /images/,还会继续往下搜索
[ configuration F ]
}


location = /test.htm {
root /usr/local/var/www/htm;
index index.htm;
}

注意:location的优先级与location配置的位置无关

反向代理

反向代理通过proxy_pass指令来实现。
启动一个Java Web项目,端口号为8081

1
2
3
4
5
6
7
8
9
10
11
12
13
server {
listen 80;
server_name localhost;

location / {
proxy_pass http://localhost:8081;
proxy_set_header Host $host:$server_port;
# 设置用户ip地址
proxy_set_header X-Forwarded-For $remote_addr;
# 当请求服务器出错去寻找其他服务器
proxy_next_upstream error timeout invalid_header http_500 http_502 http_503;
}
}

当我们访问localhost的时候,就相当于访问 localhost:8081

负载均衡

RR(round robin :轮询 默认)

每个请求按时间顺序逐一分配到不同的后端服务器,也就是说第一次请求分配到第一台服务器上,第二次请求分配到第二台服务器上,如果只有两台服务器,第三次请求继续分配到第一台上,这样循环轮询下去,也就是服务器接收请求的比例是 1:1, 如果后端服务器down掉,能自动剔除。轮询是默认配置,不需要太多的配置

同一个项目分别使用8081和8082端口启动项目

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
upstream web_servers {  
server localhost:8081;
server localhost:8082;
}

server {
listen 80;
server_name localhost;
#access_log logs/host.access.log main;


location / {
proxy_pass http://web_servers;
# 必须指定Header Host
proxy_set_header Host $host:$server_port;
}
}

访问地址仍然可以获得响应 http://localhost/api/user/login?username=zhangsan&password=111111 ,这种方式是轮询的

权重

指定轮询几率,weight和访问比率成正比, 也就是服务器接收请求的比例就是各自配置的weight的比例,用于后端服务器性能不均的情况,比如服务器性能差点就少接收点请求,服务器性能好点就多处理点请求。

1
2
3
4
5
upstream test {
server localhost:8081 weight=1;
server localhost:8082 weight=3;
server localhost:8083 weight=4 backup;
}

示例是4次请求只有一次被分配到8081上,其他3次分配到8082上。backup是指热备,只有当8081和8082都宕机的情况下才走8083

ip_hash

上面的2种方式都有一个问题,那就是下一个请求来的时候请求可能分发到另外一个服务器,当我们的程序不是无状态的时候(采用了session保存数据),这时候就有一个很大的很问题了,比如把登录信息保存到了session中,那么跳转到另外一台服务器的时候就需要重新登录了,所以很多时候我们需要一个客户只访问一个服务器,那么就需要用iphash了,iphash的每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。

1
2
3
4
5
upstream test {
ip_hash;
server localhost:8080;
server localhost:8081;
}

fair(第三方)

按后端服务器的响应时间来分配请求,响应时间短的优先分配。这个配置是为了更快的给用户响应

1
2
3
4
5
upstream backend {
fair;
server localhost:8080;
server localhost:8081;
}

url_hash(第三方)

按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,后端服务器为缓存时比较有效。在upstream中加入hash语句,server语句中不能写入weight等其他的参数,hash_method是使用的hash算法

1
2
3
4
5
6
upstream backend {
hash $request_uri;
hash_method crc32;
server localhost:8080;
server localhost:8081;
}

以上5种负载均衡各自适用不同情况下使用,所以可以根据实际情况选择使用哪种策略模式,不过fair和url_hash需要安装第三方模块才能使用。

动静分离

动静分离是让动态网站里的动态网页根据一定规则把不变的资源和经常变的资源区分开来,动静资源做好了拆分以后,我们就可以根据静态资源的特点将其做缓存操作,这就是网站静态化处理的核心思路。

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
upstream web_servers {  
server localhost:8081;
server localhost:8082;
}

server {
listen 80;
server_name localhost;

set $doc_root /usr/local/var/www;

location ~* \.(gif|jpg|jpeg|png|bmp|ico|swf|css|js)$ {
root $doc_root/img;
}

location / {
proxy_pass http://web_servers;
# 必须指定Header Host
proxy_set_header Host $host:$server_port;
}

error_page 500 502 503 504 /50x.html;
location = /50x.html {
root $doc_root;
}

}

其他

return指令

返回http状态码 和 可选的第二个参数可以是重定向的URL

1
2
3
location /permanently/moved/url {
return 301 http://www.example.com/moved/here;
}

rewrite指令

重写URI请求 rewrite,通过使用rewrite指令在请求处理期间多次修改请求URI,该指令具有一个可选参数和两个必需参数。

第一个(必需)参数是请求URI必须匹配的正则表达式。

第二个参数是用于替换匹配URI的URI。

可选的第三个参数是可以停止进一步重写指令的处理或发送重定向(代码301或302)的标志

1
2
3
location /users/ {
rewrite ^/users/(.*)$ /show?user=$1 break;
}

error_page指令

使用error_page指令,您可以配置NGINX返回自定义页面以及错误代码,替换响应中的其他错误代码,或将浏览器重定向到其他URI。在以下示例中,error_page指令指定要返回404页面错误代码的页面(/404.html)。

1
error_page 404 /404.html;

日志

访问日志:需要开启压缩 gzip on; 否则不生成日志文件,打开log_formataccess_log注释

1
2
3
4
5
6
7
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 /usr/local/etc/nginx/logs/host.access.log main;

gzip on;

deny 指令

1
2
3
4
5
# 禁止访问某个目录
location ~* \.(txt|doc)${
root $doc_root;
deny all;
}

内置变量

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相同

  1. Install the prerequisites:
    sudo yum install yum-utils

  2. 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=true
  3. To install nginx, run the following command:
    sudo yum install nginx
    When prompted to accept the GPG key, verify that the fingerprint matches 573B FD6B 3D8F BC64 1079 A6AB ABF5 BD82 7BD9 BF62, and if so, accept it.

  4. (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

0%