我有一个现有的服务器,它可以很好地使用nginx和ISPconfig托管多个站点。但是我创建了一个新网站并希望使用Laravel。
我已经通过作曲家成功安装了Laravel,并且在我访问mywebsite.com/public时看到熟悉的欢迎刀片已经显示
接下来我要做的是制作一些干净的网址。我对vhost文件的体验有限,我在配置方面遇到了一些麻烦。
我的路线文件看起来像这样
Route::get('/', function () {
return view('welcome');
});
Route::get('/test', function () {
return view('test');
});
我希望看到mywebsite.com/test显示test.blade.php的内容
我知道我需要先对vhost文件进行一些工作才能预期这个工作,但我对vhosts的体验有限,而且我有点不知所措。
我当前的文件看起来像这样
server {
listen *:80;
server_name mywebsite.com ;
root /var/www/mywebsite.com/web;
index index.html index.htm index.php index.cgi index.pl index.xhtml;
error_page 400 /error/400.html;
error_page 401 /error/401.html;
error_page 403 /error/403.html;
error_page 404 /error/404.html;
error_page 405 /error/405.html;
error_page 500 /error/500.html;
error_page 502 /error/502.html;
error_page 503 /error/503.html;
recursive_error_pages on;
location = /error/400.html {
internal;
}
location = /error/401.html {
internal;
}
location = /error/403.html {
internal;
}
location = /error/404.html {
internal;
}
location = /error/405.html {
internal;
}
location = /error/500.html {
internal;
}
location = /error/502.html {
internal;
}
location = /error/503.html {
internal;
}
error_log /var/log/ispconfig/httpd/mywebsite.com/error.log;
access_log /var/log/ispconfig/httpd/mywebsite.com/access.log combined;
location ~ /\. {
deny all;
access_log off;
log_not_found off;
}
location = /favicon.ico {
log_not_found off;
access_log off;
}
location = /robots.txt {
allow all;
log_not_found off;
access_log off;
}
location /stats/ {
index index.html index.php;
auth_basic "Members Only";
auth_basic_user_file /var/www/clients/client1/web5/web/stats/.htpasswd_stats;
}
location ^~ /awstats-icon {
alias /usr/share/awstats/icon;
}
location ~ \.php$ {
try_files /5e26a1d85cb98f7191261e023385e60d.htm @php;
}
location @php {
try_files $uri =404;
include /etc/nginx/fastcgi_params;
fastcgi_pass unix:/var/lib/php5-fpm/web5.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_intercept_errors on;
}
}
现在在另一台服务器上,我使用了这个简单的指令
server {
root /var/www/public;
index index.php index.html index.htm;
server_name localhost;
location / {
try_files $uri $uri/ /index.php$is_args$args;
}
}
但是我只能使用当前服务器上的vhost来做什么,因为ISPconfig为我写了大部分内容,它拒绝编写上面配置在别处工作。另外我觉得直接编辑文件会是不好的做法,我总是认为ISPconfig会为我重写文件,所以我不确定如何最好地继续这个。
我的选择是继续编辑vhost并希望最好,但如果我这样做,我怎么能确保ISPconfig无法覆盖文件而不诉诸" hacky"方法
或者,是否有我可以通过ISPconfig输入的配置,允许重写以适合Laravel的方式正确发生?在这种情况下,输入的任何指令都需要优先于〜.php $ 子句,因为在通过控制面板输入任何指令之前,ISPconfig会写入该指令。
答案 0 :(得分:4)
我最近遇到了同样的问题。挖掘ISPConfig的源代码,我知道它可以插入/合并/删除该默认vhosts文件的位置块。所以我做了以下事情:
网站的菜单>选择网站>选项
然后我在“nginx指令”字段中输入了以下内容:
# redirect stuff to the public inner folder
location / {
root {DOCROOT}/public;
try_files /public/$uri /public/$uri/ /public/index.php?$query_string;
}
# merged the stuff people suggests for laravel inside the php block
# mind the 'merge' keyword that did the trick
location ~ \.php$ { ##merge##
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_intercept_errors off;
fastcgi_buffer_size 16k;
fastcgi_buffers 4 16k;
}
答案 1 :(得分:3)
Danilo的回答有点问题。 Php跑,但js / css / images等资源停止加载。将以下内容添加到ISPConfig中的nginx指令适用于我:
location / {
root {DOCROOT}/public;
try_files $uri public/$uri/ /public/index.php?$query_string;
}
答案 2 :(得分:1)
我不是这方面的专家,但根据我过去的经验,如果我有两个域,我会在两个不同的文件中为每个域定义服务器块,并将它们放在/etc/nginx/sites-available/site1.com和/ etc / nginx的/位点可用/ site2.com
但看起来您已经拥有一个可以使用mywesite.com访问的网站,该网站位于/var/www/mywebsite.com/web; (请参阅配置文件的根值)
现在您在/var/www/mywebsite.com/test位置的测试文件夹中安装Laravel。
要访问它,您需要尝试在ispconfig文件的末尾添加以下内容。
请注意我是如何使用服务器块根目录下laravel公共文件夹的相对路径。
location /../test/public {
try_files $uri $uri/ /index.php$is_args$args;
}
有关更详细的教程,请尝试Nginx Server Block Setup。
希望这有帮助,
ķ