Nginxを使用してマルチユーザーのFreeBSDサーバーをセットアップしようとしています。
これまでの私の手順は次のとおりです。
/usr/local/etc/nginx/nginx.conf
ファイルで、nginxがwwwグループの一部であるwwwユーザーとして機能するようにuser www www;
を設定しました。また、user = www
にgroup = www
と/usr/local/etc/php-fpm.conf
を設定しました。
私が達成したいのは、(管理者として)ユーザーをシステムに追加し、ユーザーが使用できるように/usr/local/www
にユーザー用のフォルダー(およびもちろんnginx.confの対応するサーバーエントリ)を作成できることです。共有ホスティング環境に少し似ています(自動セットアップなし)。
Nginxとphpをインストールした後、最初のテストユーザーanon
を作成し、彼用のフォルダー/usr/local/www/anonsite
を作成しました。
次に、chown anon:www anonsite
を実行して彼を所有者にし、グループをwwwに設定すると、フォルダーのアクセス許可は次のようになります:drwxr-xr-x 3 anon www 4 Apr 11 22:00 anonsite
。
このフォルダーにanon
としてinfo.phpを作成し、ブラウザーでそれを指すようになりました。次に、ダウンロードと抽出をテストしました grav ですが、空白のページしか表示されません(権限の設定が間違っているためだと思います)。 php-fpm.conf user=anon
を変更すると、意図したとおりに機能します。または、ダウンロードしたgravフォルダーを抽出した後、chmod -R g+w /usr/local/www/anonsite
を使用すると、同様に機能します。
そして、これは私が現在立ち往生していて頭を包むことができないところです。これらの「修正」はどちらも、私には間違っているか悪い習慣のように思えます。セットアップを使用している共有ホストプロバイダーと比較すると、そこにあるwebrootフォルダーにはdrwxr-x--- 5 username Apache 4096 Apr 2 05:00 username
権限しかなく、gravテストセットアップを抽出した後、すぐに機能します(これは、Apacheの動作方法によるものでしょうか? )。
誰かが私にそれが事実である理由を説明し、おそらくこれを適切に設定するための手順、または私が間違っていることを私に説明してもらえますか?
私が試したアプローチは、全体的に悪い習慣と見なされていますか?
nginxは、ファイルのグループ所有者をnginxユーザーとして明示的に設定しなくても、必要に応じてファイルを読み取ることができる可能性があります。
そしてphp-fpmの場合、nginxユーザーをリスナーとして設定するだけです。
php-fpm.d/php-fpm-user1.conf
[grav]
user = user1
group = use1
listen = /var/run/php-fpm-user1.sock
listen.owner = www
listen.group = www
pm = dynamic
pm.max_children = 5
pm.start_servers = 2
pm.min_spare_servers = 1
pm.max_spare_servers = 3
php.inicgi.fix_pathinfo=0
nginx.conf
user www;
worker_processes auto;
worker_rlimit_nofile 8192; # should be bigger than worker_connections
pid /run/nginx.pid;
events {
use kqueue; # No epoll on FreeBSD
worker_connections 8000;
multi_accept on;
}
http {
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 30; # longer values are better for each ssl client, but take up a worker connection longer
types_hash_max_size 2048;
server_tokens off;
# maximum file upload size
# update 'upload_max_filesize' & 'post_max_size' in /etc/php5/fpm/php.ini accordingly
client_max_body_size 32m;
# client_body_timeout 60s; # increase for very long file uploads
# set default index file (can be overwritten for each site individually)
index index.html;
# load MIME types
include mime.types; # get this file from https://github.com/h5bp/server-configs-nginx
default_type application/octet-stream; # set default MIME type
# logging
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
# turn on gzip compression
gzip on;
gzip_disable "msie6";
gzip_vary on;
gzip_proxied any;
gzip_comp_level 5;
gzip_buffers 16 8k;
gzip_http_version 1.1;
gzip_min_length 256;
gzip_types
application/atom+xml
application/javascript
application/json
application/ld+json
application/manifest+json
application/rss+xml
application/vnd.geo+json
application/vnd.ms-fontobject
application/x-font-ttf
application/x-web-app-manifest+json
application/xhtml+xml
application/xml
font/opentype
image/bmp
image/svg+xml
image/x-icon
text/cache-manifest
text/css
text/plain
text/vcard
text/vnd.rim.location.xloc
text/vtt
text/x-component
text/x-cross-domain-policy;
# disable content type sniffing for more security
add_header "X-Content-Type-Options" "nosniff";
# force the latest IE version
add_header "X-UA-Compatible" "IE=Edge";
# enable anti-cross-site scripting filter built into IE 8+
add_header "X-XSS-Protection" "1; mode=block";
}
server {
#listen 80;
index index.html index.php;
## Begin - Server Info
root /home/user1/www/html;
server_name localhost;
## End - Server Info
## Begin - Index
# for subfolders, simply adjust:
# `location /subfolder {`
# and the rewrite to use `/subfolder/index.php`
location / {
try_files $uri $uri/ /index.php?$query_string;
}
## End - Index
## Begin - Security
# deny all direct access for these folders
location ~* /(\.git|cache|bin|logs|backup|tests)/.*$ { return 403; }
# deny running scripts inside core system folders
location ~* /(system|vendor)/.*\.(txt|xml|md|html|yaml|yml|php|pl|py|cgi|twig|sh|bat)$ { return 403; }
# deny running scripts inside user folder
location ~* /user/.*\.(txt|md|yaml|yml|php|pl|py|cgi|twig|sh|bat)$ { return 403; }
# deny access to specific files in the root folder
location ~ /(LICENSE\.txt|composer\.lock|composer\.json|nginx\.conf|web\.config|htaccess\.txt|\.htaccess) { return 403; }
## End - Security
## Begin - PHP
location ~ \.php$ {
fastcgi_pass unix:/var/run/php/php-fpm-user1.sock;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root/$fastcgi_script_name;
}
## End - PHP
}`