【发布时间】:2020-03-12 12:49:27
【问题描述】:
我遇到了一个非常令人沮丧的错误。我正在尝试将我的本地环境移动到服务器。它在我的本地主机上运行良好,但在所有需要登录的路由上都出现 403 禁止错误。我可以访问 /login 并登录,但访问中间件路由会吐出 403。
旁注:我使用的本地数据库与在生产环境中使用的数据库相同(直接 IP 地址而不是本地主机)。该数据库与生产环境托管在同一台服务器上。
迁移到生产环境的步骤:
- git 克隆仓库
- 调整 .env 文件以反映生产环境(调试错误,环境生产)
- 作曲家安装
- php artisan storage:link(图片需要)
- 在域中设置 nginx
以下是一些相关文件:
路由/web.php:
Auth::routes(['register' => false]);
Route::prefix('cms')->middleware('auth')->group(function() {
Route::get('/', 'Cms\CmsController@index')->name('cms.index');
Route::post('/upload', 'Cms\PhotoController@storeMedia')->name('photo.storeMedia');
Route::resource('projects', 'Cms\ProjectController', ['except' => ['store', 'show']]);
Route::resource('customers', 'Cms\CustomerController', ['except' => ['store']]);
Route::resource('users', 'Cms\UserController', ['except' => ['store', 'show']]);
});
Route::get('/over-ons', 'Site\SiteController@about')->name('site.about');
Route::get('/portfolio/{id}/{slug}', 'Site\SiteController@project')->name('site.project');
Route::get('/portfolio', 'Site\SiteController@projects')->name('site.projects');
Route::get('/diensten', 'Site\SiteController@services')->name('site.services');
Route::get('/klanten', 'Site\SiteController@customers')->name('site.customers');
Route::get('/contact', 'Site\SiteController@contact')->name('site.contact');
Route::get('/', 'Site\SiteController@index')->name('site.index');
Nginx 子块:
server {
listen 80;
root /sites/mediafox/public;
index index.php index.html index.htm index.nginx-debian.html;
server_name [removed for privacy];
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php/php7.3-fpm.sock;
# fastcgi_pass 127.0.0.1:9000;
}
location ~ /\.ht {
deny all;
}
}
ls -l on root(权限):
drwxrwxr-x 2 niels niels 4096 Nov 16 16:44 _dev
drwxrwxr-x 6 niels niels 4096 Nov 16 16:44 app
-rw-rw-r-- 1 niels niels 1686 Nov 16 16:44 artisan
drwxrwxr-x 3 niels niels 4096 Nov 16 16:44 bootstrap
-rw-rw-r-- 1 niels niels 1716 Nov 16 16:44 composer.json
-rw-rw-r-- 1 niels niels 208784 Nov 16 16:44 composer.lock
drwxrwxr-x 2 niels niels 4096 Nov 16 16:44 config
drwxrwxr-x 5 niels niels 4096 Nov 16 16:44 database
-rw-rw-r-- 1 niels niels 432338 Nov 16 16:44 package-lock.json
-rw-rw-r-- 1 niels niels 1307 Nov 16 16:44 package.json
-rw-rw-r-- 1 niels niels 1297 Nov 16 16:44 phpunit.xml
drwxrwxr-x 6 niels niels 4096 Nov 16 17:01 public
drwxrwxr-x 6 niels niels 4096 Nov 16 16:44 resources
drwxrwxr-x 2 niels niels 4096 Nov 16 16:44 routes
-rw-rw-r-- 1 niels niels 563 Nov 16 16:44 server.php
drwxrwxr-x 6 www-data www-data 4096 Nov 16 16:44 storage
drwxrwxr-x 4 niels niels 4096 Nov 16 16:44 tests
drwxrwxr-x 49 niels niels 4096 Nov 16 16:46 vendor
-rw-rw-r-- 1 niels niels 724 Nov 16 16:44 webpack.mix.js
因此得出结论:我不需要登录的路线运行良好。当我尝试访问需要中间件 'auth' 的 url 时出现问题。
任何帮助将不胜感激。
-- 更新 1--
好像和Nginx有关。我的 Nginx 日志中有这个:
2019/11/17 14:40:09 [error] 1525#1525: *335 directory index of "/sites/mediafox/public/cms/" is forbidden, client: [ip removed], server: www.mediafox.*****.nl, request: "GET /cms/ HTTP/1.1", host: "mediafox.******.nl"
【问题讨论】:
-
您的会话驱动程序是什么?尝试将其设置为“数据库”。就像你所说的那样,会话驱动程序设置为“文件”并且无法写入该文件。
-
如果你将
auth中间件添加到你的site.contact路由中,你是否也会得到403? -
@PavelLint 它在“文件”上,但这与我的本地环境没有什么不同。我试过数据库,这给了我一个 500 服务器错误。
-
@lagbox 试过了。工作正常。在访问该路线之前,我也尝试过 /logout 。我在该网址上看到“哎呀,出了点问题”窗口。
-
@nepp95 要使数据库会话正常工作,您需要运行
php artisan session:table,然后运行php artisan migrate。那应该可以解决您的问题