从Nginx配置问题看软连接和硬连接

最近没事在捣鼓小项目,需要在服务器上安装nginx,本来只是一个命令的事情但却在重启的时候报错了。

apt-get install nginx

安装完成之后也显示了安装成功,但当重新配置nginx.conf然后重启的时候有个报错:

open() "/usr/share/nginx/nginx.conf" failed

但是我的nginx安装位置明明就不在这个路径,为什么会去share路径下查找配置文件呢?

nginx官网也都默认路径在/etc/nginx下面的。

The way nginx and its modules work is determined in the configuration file. By default, the configuration file is named `nginx.conf` and placed in the directory `/usr/local/nginx/conf`, `/etc/nginx`, or `/usr/local/etc/nginx`.

虽然不知道为什么会这样,但或许我们知道可以怎么解决它。

既然nginx想去share路径下查找config,而我配置的真实config在etc下,那只需要在share路径下链接etc下的nginx.conf就可以了。

所以,我们可以采用软连接or硬链接的方式。这里的话其实两种方式都可以,这里我选择了软连接

ln -s /etc/nginx/nginx.conf /usr/share/nginx/nginx.conf

执行完这个命令之后,就相当于在/usr/share/nginx路径下创建了指向 /etc/nginx/nginx.conf配置文件的指针文件。

当再次重启nginx的时候,就算nginx去share路径下寻找配置文件,其实查到的还是etc下面的配置文件。这样就没有问题了。

从这个小问题,我们可以顺便学习下硬链接和软连接的知识点。

索引节点

在Linux的文件系统中,保存在磁盘分区中的文件,不管是什么类型,系统都会给它分配一个编号,这个编号被称为索引节点编号(Inode Index),它是该文件或者目录在linux文件系统中的唯一标识。有了这个编号值,就可以查到该文件的详细内容。

硬链接

硬链接相当于是源文件的一个镜像文件,文件内容和源文件完全相同,也指向同一个索引节点。所以,当修改源文件或者镜像文件的时候,另一个文件的内容也会跟着响应的变更。当删除其中一个文件,因为索引节点还可以指向另一个文件,所以另一个文件仍然为有效状态。因此,该机制可以有效的防止误删操作。

硬链接只能在同一类型的文件系统中进行链接,不能跨文件系统。同时它只能对文件进行链接,不能链接目录。

软连接

软连接可以理解为指向源文件的指针,它生成的新文件并没有和源文件一样的内容。文件存放的内容其实是源文件的路径指向,通过这个方式可以快速定位到软连接所指向的源文件实体。所以当源文件被删除后,软连接生成的文件也会无效掉。但当我们重新对软连接生成的文件进行写入后,源文件就会被还原回来,但源文件的内容是我们新写入的内容而不是老的内容,这也说明了软连接产生文件存放的只是源文件的路径。

软链接常用来解决空间不足的问题,比如某个文件文件系统空间已经用完了,但是现在必须在该文件系统下创建一个新的目录并存储大量的文件,那么可以把另一个剩余空间较多的文件系统中的目录链接到该文件系统中。

软链接可以跨文件系统而链接,也可以同时对文件或目录进行链接。

二者区别
  • 软链接以存放另一个文件的路径的形式存在,硬链接以文件副本的形式存在;
  • 软链接可以跨不同的文件系统而链接,硬链接不可以;
  • 软链接可以对目录进行链接,而硬链接不可以;
  • 软链接可以对一个不存在的文件名进行链接,硬链接必须要有源文件。
  • 删除软链接并不影响被指向的文件,但若被指向的原文件被删除,则相关软连接就变成了死链接
  • 删除硬链接的话,只要索引节点的个数不为零,则不会对原始文件造成任何影响;

软连接和硬连接都通过ln命令来实现。

ln 参数 源文件或目录 目标文件或目录

-s 软链接(符号链接)

实践测试

首先在自己的一个工作目录下创建一个文件,然后对这个文件进行链接的创建:

$ touch myfile && echo "hello world" > myfile

现在我们创建了一个普通地不能再普通的文件了。然后我们对它创建一个硬链接,并查看一下当前目录:

$ ln myfile hard
$ ls -li

1186926 -rw-r--r--  2 root  root  May 24 15:43 hard
1186926 -rw-r--r--  2 root  root  May 24 15:43 myfile

ls 结果的最左边一列,就是文件的 inode 值,这两个文件就如同一个文件一样,inode 值相同,都指向同一个区块。

然后我们修改一下刚才创建的 hard 链接文件:

$ echo "New line" >> hard
$ cat myfile

hello world
New line

可以看到,这两个文件果真就是一个文件。

下面看看软链接(也就是符号链接)和它有什么区别。

$ ln -s myfile soft
$ ls -li

1186926 -rw-r--r--  2 root  root  May 24 15:43 hard
1186926 -rw-r--r--  2 root  root  May 24 15:43 myfile
1188507 lrwxr-xr-x  1 root  root  May 24 15:43 soft -> myfile

这个软链接的 inode 和源文件是不一样的,并且它的文件属性上也有一个 l 的 flag,这就说明它与之前我们创建的两个文件根本不是一个类型。而且后面会有一个soft指向myfile的标志。

下面我们试着删除 myfile 文件,然后分别输出软硬链接的文件内容:

$ rm myfile
$ cat hard

hello world
New line

硬链接产生的文件不受影响。

$ cat soft

cat: soft: No such file or directory

软链接显示无法找到该文件了。

我们再向这个软链接写点东西试试:

$ echo "Something" >> soft
$ ls

hard   myfile soft

可以看到,刚才删除的 myfile 文件竟然又出现了!这就说明,当我们写入访问软链接时,系统自动将其路径替换为其所代表的绝对路径,并直接访问那个路径了。

所以hard文件被自动生成,刚才写入soft的内容其实是被写入到hard中了。

$ cat hard

Something

通过这一波操作,大家应该也都掌握了软连接和硬链接了吧。

那么说回开头,为什么我选择了软连接而不是硬链接呢?

  • 可以占用更少的空间
  • 配置文件只会在etc目录下被更改而不会在share下被更改

当然,如果想通过硬链接来实现也是完全可以的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Nginx配置连接(Keep-Alive)有两个方面需要考虑:客户端和服务器端。 首先,需要在客户端配置支持长连接。大多数现代浏览器默认支持长连接,但你可以通过以下方式确保客户端支持长连接: 1. 在 HTML 页面的头部添加以下代码: ``` <meta http-equiv="Connection" content="Keep-Alive"> ``` 2. 在 HTTP 请求头中添加以下字段: ``` Connection: Keep-Alive ``` 接下来,需要在 Nginx 服务器端进行配置以支持长连接。打开 Nginx 配置文件(一般是 nginx.conf),并进行以下更改: 1. 在 `http` 配置块中添加以下指令,以启用长连接: ``` keepalive_timeout 65; keepalive_requests 100; ``` `keepalive_timeout` 指定了每个连接的最大空闲时间(以秒为单位),超过该时间后将关闭连接。`keepalive_requests` 指定了在关闭连接之前最大允许的请求数。 2. 在 `server` 或 `location` 配置块中,可以根据需要进一步调整长连接的设置。例如,可以使用以下指令设置长连接的超时时间: ``` proxy_read_timeout 300; ``` 此示例中的 `proxy_read_timeout` 设置了代理服务器(如果使用了反向代理)的读取超时时间。 3. 保存并重新加载或重启 Nginx 服务器,使配置生效。 这样,Nginx 就会在客户端请求后保持连接打开一段时间,以便处理连续的请求,从而提高性能和响应速度。请根据实际需求调整长连接的超时时间和其他相关配置

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值