我有一台服务器,我想用作个人服务器,我的所有项目都在/var/www
下。
我目前有两个文件夹,/var/www/html
和/var/www/site
。
我希望能够通过以下网址访问这些文件夹(123.123.123.123
是我的服务器IP):
123.123.123.123/html
和123.123.123.123/site
这是我的default
虚拟主机文件:
server {
listen 80 default_server;
listen [::]:80 default_server;
root /var/www/html;
index index.php index.html index.htm index.nginx-debian.html;
server_name 123.123.123.123;
location / {
try_files $uri $uri/ =404;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php7.0-fpm.sock;
}
location ~ /\.ht {
deny all;
}
}
以下是我为/var/www/site
创建的名为site
的内容:
server {
listen 80;
listen [::]:80;
# Because this site uses Laravel, it needs to point to /public
root /var/www/site/public;
index index.php index.html index.htm index.nginx-debian.html;
server_name 123.123.123.123;
location /site {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php7.0-fpm.sock;
}
location ~ /\.ht {
deny all;
}
}
但是当我去123.123.123.123/site
时,它说404 Not Found,显然我做错了(是的,我重新启动了nginx)。
请帮忙!
答案 0 :(得分:0)
您只需要一个server
阻止,因为/html
和/site
都位于同一个server
。
使用nginx -t
检查nginx
是否确实重新启动而不会出现任何错误。
由于/site
使用复杂的目录方案,您需要使用嵌套的location
块来使路径正确。
你的第一个项目似乎有一个简单的静态和PHP文件排列。您可以使用root /var/www;
语句将以/html
开头的URI映射到html
文件夹。有关详情,请参阅this document。
这样的事可能适合你:
server {
listen 80 default_server;
listen [::]:80 default_server;
root /var/www/;
index index.php index.html index.htm index.nginx-debian.html;
location / {
try_files $uri $uri/ =404;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php7.0-fpm.sock;
}
location ~ /\.ht {
deny all;
}
location ^~ /site {
alias /var/www/site/public;
if (!-e $request_filename) { rewrite ^ /site/index.php last; }
location ~ \.php$ {
if (!-f $request_filename) { return 404; }
include snippets/fastcgi-php.conf;
fastcgi_param SCRIPT_FILENAME $request_filename;
fastcgi_pass unix:/run/php/php7.0-fpm.sock;
}
}
}
默认服务器不需要server_name
。