/var/www 目录归root:root其所有,这意味着没有人可以使用它并且完全没有用。既然我们都想要一个实际工作的 Web 服务器(并且没有人应该以“root”身份登录),那么我们需要解决这个问题。
只有两个实体需要访问。
PHP/Perl/Ruby/Python都需要访问文件夹和文件,因为它们创建了许多文件夹和文件(即/uploads/)。这些脚本语言应该在 nginx 或 apache 下运行(或者甚至是像 FastCGI for PHP 这样的其他东西)。
开发商
他们如何获得访问权限?我知道有人在某个地方以前做过这件事。然而,有数十亿个网站,您会认为会有更多关于此主题的信息。
我知道 777 是所有者/组/其他的完全读/写/执行权限。因此,这似乎不需要正确,因为它为随机用户提供了完全权限。
需要使用哪些权限,/var/www以便:
所有人都可以在那里读取、创建和运行文件(和目录)吗?
如果我是对的,Ruby 和 PHP 脚本不会直接“执行”-而是传递给解释器。所以不需要对/var/www...中的文件执行权限?因此,似乎正确的许可chmod -R 1660将使
这样对吗?
更新 1:我刚刚意识到文件和目录可能需要不同的权限 - 我在上面谈论文件,所以我不确定目录权限需要是什么。
更新 2:文件夹结构/var/www发生了巨大变化,因为上述四个实体之一总是添加(有时删除)多个级别的文件夹和子文件夹。他们还创建和删除其他 3 个实体可能需要读/写访问权限的文件。因此,权限需要对文件和目录都做上述四件事。由于它们都不需要执行权限(请参阅上面有关 ruby/php 的问题),我认为rw-rw-r-- …
我的服务器上有 Postfix 设置,以便我可以使用命令行发送外发邮件:
mail -s "Subject" address@example.com
Run Code Online (Sandbox Code Playgroud)
我在网上阅读的所有内容似乎都可以互换使用这两个术语。
我正在使用 bash 脚本,试图阻止它尝试替换我的 heredoc 中的变量。如何将heredoc设置为A)转义变量名称而不是解析它们或B)返回整个字符串不变?
cat > /etc/nginx/sites-available/default_php <<END
server {
listen 80 default;
server_name _;
root /var/www/$host; <--- $host is a problem child
}
END
Run Code Online (Sandbox Code Playgroud)
照原样,当我完成将它注入文件时,我只剩下这个:
server {
listen 80 default;
server_name _;
root /var/www/;
}
Run Code Online (Sandbox Code Playgroud) 我一直在尝试组合一个基本的服务器 iptables 脚本,该脚本适用于大多数使用 HTTP(S) 和 SSH(端口 80、443 和 22)运行基本网络服务器的站点。毕竟,大多数VPS只需要这些起始端口规则,以后可以根据需要添加邮件或游戏端口。
到目前为止,我有以下规则集,我想知道是否有人知道更好的脚本或可以添加的任何改进。
*filter
# Allows all loopback (lo0) traffic and drop all traffic to 127/8 that doesn't use lo0
-A INPUT -i lo -j ACCEPT
-A INPUT ! -i lo -d 127.0.0.0/8 -j REJECT
# Accepts all established inbound connections
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# Allows all outbound traffic
# You can modify this to only allow certain traffic
-A OUTPUT -j ACCEPT
# Allows HTTP and HTTPS …Run Code Online (Sandbox Code Playgroud) 在下面的几行中,我可能有一个特定于站点的配置文件,其中包含该站点独有的其他fastcgi_params。如果这个文件存在,我想加载它。
server {
listen 80 default;
server_name _;
root /path/www/$host;
# Pass PHP scripts to php-fastcgi listening on port 9000
location ~ \.php {
include fastcgi_params;
fastcgi_pass 127.0.0.1:9000;
if (-f /path/www/$host/nginx.conf) {
include /path/www/$host/nginx.conf;
}
}
}
Run Code Online (Sandbox Code Playgroud)
但是,这不起作用,我得到的错误是:
nginx: [emerg] "include" 指令在这里是不允许的......
我认为与其单独检查,不如让include 来检查我。
server {
listen 80 default;
server_name _;
root /path/www/$host;
# Pass PHP scripts to php-fastcgi listening on port 9000
location ~ \.php {
include fastcgi_params;
fastcgi_pass 127.0.0.1:9000; …Run Code Online (Sandbox Code Playgroud) 使用 nginx HttpLimitReq模块可以通过 IP 限制请求。但是,我不明白“nodelay”选项的作用。
如果不需要限制突发延迟内的超额请求,则应使用 nodelay
limit_req zone=one burst=5 nodelay;
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用基本的 master/catch-all vhost 配置来设置我的开发 nginx/PHP 服务器,以便我可以根据需要创建无限的___.framework.loc域。
server {
listen 80;
index index.html index.htm index.php;
# Test 1
server_name ~^(.+)\.frameworks\.loc$;
set $file_path $1;
root /var/www/frameworks/$file_path/public;
include /etc/nginx/php.conf;
}
Run Code Online (Sandbox Code Playgroud)
但是,对于此设置,nginx 会响应 404 错误。我知道 nginx 和 PHP 正在工作并且有权限,因为localhost我使用的配置工作正常。
server {
listen 80 default;
server_name localhost;
root /var/www/localhost;
index index.html index.htm index.php;
include /etc/nginx/php.conf;
}
Run Code Online (Sandbox Code Playgroud)
我应该检查什么才能找到问题?这是他们正在加载的 php.conf 的副本。
location / {
try_files $uri $uri/ /index.php$is_args$args;
}
location ~ \.php$ {
try_files $uri =404;
include fastcgi_params;
fastcgi_index index.php;
# …Run Code Online (Sandbox Code Playgroud) 我看到 Apache 和 Nginx 都使用 var/www 作为它们的 Web 根目录 - 但该目录未包含在Filesystem Hierarchy Standard 中。我还在目录中看到了一些带有 web 根/home/username/www目录的服务器。那么网络根在哪里呢?或者更确切地说,对于公共 Web 服务器来说,它大部分时间应该去哪里?
我正在启动一个项目,该项目使用环境变量来设置数据库连接和其他一些事情。(他们不想使用配置文件,因为人们粗心大意并覆盖了它们)。
无论如何,我正在使用 nginx,虽然它支持 env - 它似乎并没有很好地支持它。您不能在每个服务器块的基础上设置 env 值。换句话说,这行不通:
server {
listen 80;
server_name domain;
env FOO = "bar";
}
Run Code Online (Sandbox Code Playgroud)
你必须这样做:
env FOO = "bar";
http {
server {
listen 80;
server_name domain;
}
}
Run Code Online (Sandbox Code Playgroud)
这意味着我不能拥有特定于 vhost 的值。所以我必须为每个站点创建一个完整的 vhost 配置,并且只激活我目前想要的一个,以便正确设置值。
有没有办法解决这个问题?
我在我的 VPS 上安装了 Debian 5,但我发现它已经启动并运行了 apache2。我试过
apt-get remove apache2
Run Code Online (Sandbox Code Playgroud)
但它说 apache2 没有运行。我检查了顶部,是的,它就在那里。然后我把它关掉了。
/etc/init.d/apache2 stop
Run Code Online (Sandbox Code Playgroud)
工作正常并关闭守护程序。但是,我仍然无法删除它。我试过了,aptitude remove但它说它没有安装。
到底是怎么回事?
nginx ×4
linux ×3
virtualhost ×2
web-server ×2
apache-2.2 ×1
bash ×1
chmod ×1
debian ×1
email-server ×1
fastcgi ×1
firewall ×1
heredoc ×1
iptables ×1
permissions ×1
php ×1
postfix ×1
security ×1
sendmail ×1
vps ×1