小编Car*_*rós的帖子

nginx $uri 是 url 解码

我使用nginx作为反向代理,我有 2 条规则,例如:

location ~ ^/indirect {
  rewrite ^/indirect(.*) /foobar$1;
}

location ~ ^/foobar {
  set $url http://example.com/something/index.php?var1=hello&access=$scheme://$host$uri;
  proxy_pass $url;
}
Run Code Online (Sandbox Code Playgroud)

因此,正如您所看到的,我将$uri变量作为参数传递给代理页面(该$uri变量是 nginx 的,请参阅http core module文档)。

问题是,如果我访问http://example.com/foobar/hello%20world,该$uri变量包含 /foobar/hello world(如您所见,%20已被其 url 解码值替换,一个空格)。然后,nginx 在执行 proxy_pass 行(未联系后端)之前返回 http 状态代码 400(错误请求)。

还有可用的变量$request_uri,它保存客户端发出的原始请求 URI,因此在这种情况下,它将保存正确的值和%20序列。但是我不能使用它,因为如果客户端通过/indirect路径,$request_uri将包含/indirect/...而我希望access传递给后端的参数始终为/foobar/...

有多个indirect类似规则(这是针对 DAV/calDAV/cardDAV 服务器,并且有多个客户端连接到多个路径,所以我需要这些类似indirect规则),所以在proxy_pass那里做是不可行的,并且有直接进入/foobar路径的客户端。

那么有没有什么方法可以 …

rewrite nginx encoding

9
推荐指数
1
解决办法
3万
查看次数

perl 相当于 sh -e

/bin/shand /bin/bash(我猜还有很多其他 shell)中,当脚本中的任何命令行退出时的状态代码不是 0 时,启动脚本#!/bin/sh -e(或set -e在脚本中的某个地方执行)会导致脚本中止。

是否有任何等效或解决方法可以在 perl 脚本中获得相同的行为?(即,如果任何指令产生错误,或者如果使用system(...)或反引号执行的任何外部命令返回错误代码,则立即退出)

linux perl shell-scripting

6
推荐指数
1
解决办法
1269
查看次数

通过 UUID 而不是通过路径安装 LV 有什么优势吗?

我知道我可以fstab通过放置它们的路径(如/dev/sda1/dev/mapper/myvg-logicalVolume1)或通过 fs 标签 ( LABEL=root) 或 UUID ( UUID=1234-5678-...)来指定挂载。

我看到使用 UUID 的“经典”分区在可靠性方面有明显优势,例如/dev/sda1,因为如果您重新分区驱动器/更多分区/添加更多磁盘,那么您的某些分区现在可能会被识别为另一个名称,尽管通过 UUID 挂载更难分辨您的数据存储在哪个分区/LV。

但是使用LVM,我的胆量告诉我 LVM 系统本身管理他们的磁盘/分区的发现,如果某些 PV(在使用分区/磁盘之后)现在命名不同并不重要。因此,通过 UUID 或使用类似的路径安装不会有任何区别(说到可靠性)/dev/mapper/vg-lv,后者更清晰。

这样对吗?

unix partition lvm mount uuid

5
推荐指数
1
解决办法
9230
查看次数

暂时将 STDOUT 重定向到另一个文件描述符,但仍会重定向到屏幕

我正在制作一个在内部执行一些命令的脚本,这些命令显示一些输出STDOUTSTDERR以及,但这没问题)。我需要我的脚本生成一个 .tar.gz 文件到STDOUT,所以脚本中执行的一些命令的输出也会转到STDOUT,这以输出中无效的 .tar.gz 文件结束。

因此,简而言之,可以将第一个命令输出到屏幕(因为我仍然想看到输出)但不能通过STDOUT? 此外,我想保持STDERR原样,以便那里只显示错误消息。

我的意思的一个简单例子。这将是我的脚本:

#!/bin/bash

# the output of these commands shouldn't go to STDOUT, but still appear on screen
some_cmd foo bar
other_cmd baz

#the following command creates a tar.gz of the "whatever" folder,
#and outputs the result to STDOUT
tar zc whatever/
Run Code Online (Sandbox Code Playgroud)

我试过搞乱exec文件描述符,但我仍然无法让它工作:

#!/bin/bash

# save STDOUT to #3
exec 3>&1

# the output of these commands should go to …
Run Code Online (Sandbox Code Playgroud)

linux shell bash redirection stdout

2
推荐指数
1
解决办法
3228
查看次数

linux中的只读`top`?

我有几台服务器,其中有一些客户端的应用程序,我希望为客户端提供一个应用程序以查看服务器和应用程序状态,并能够重新启动某些服务。

我已经完成了它的主要部分,用自定义 shell 脚本替换了 ssh 用户的登录 shell,该脚本为他提供了一个带有一些选项的菜单。登录后会自动用sudo(with NOPASSWD)启动菜单,因为脚本需要重新启动系统服务。问题是,我想他查看的输出tophtop,但我不希望他能够杀死或renice只能过程,也许其他的东西,都tophtop许可证。我只是想让他查看top.

是否有任何选项、标志或等效命令?

linux top htop

2
推荐指数
1
解决办法
476
查看次数

标签 统计

linux ×3

bash ×1

encoding ×1

htop ×1

lvm ×1

mount ×1

nginx ×1

partition ×1

perl ×1

redirection ×1

rewrite ×1

shell ×1

shell-scripting ×1

stdout ×1

top ×1

unix ×1

uuid ×1