---
# System prepended metadata

title: 'Nginx 開水管流量, Larave 檔案上傳問題 2022-12-28'
tags: [Web server, 檔案上傳流量, MobaXterm, 後端心得, Back end, Nginx, Laravel, 檔案上傳]

---

# Nginx 開水管流量, Larave 檔案上傳問題 2022-12-28  
###### tags: `Nginx` `Laravel` `檔案上傳流量` `檔案上傳` `MobaXterm` `Web server` `Back end` `後端心得`  

---

假如 在 Laravel 有使用 `php artisan make:controller imgUploadController`

製造一支專門來控制圖片上傳的 Controller

但如果有設定到 `file.max` 然後上傳時會顯示 HTTP error 413 問題, 這時候要開啟 nginx 的流量

```
class imgUploadController extends Controller
{
    public function imgUpload(Request $request)
    {
        // $fileName = $request->file('file')->getClientOriginalName();
        // $imgpath = $request->file('file')->storeAs('imgUpload', $fileName, 'public');
        // return response()->json(['location' => "/storage/$imgpath"]);

        $messages = [
            'file.max' => '圖片檔案不能大於 2048 kb',
        ];
        $validator = Validator::make($request->all(), [
            'file' => 'max: 2048',
        ], $messages);

        if ($validator->fails()) {
            return response()->json([
                'error' => $validator->errors()->all(),
            ], 200, [], JSON_UNESCAPED_UNICODE);
        }

        $file  = $request->file('file');
        $path = $file->store('public/imgUpload');
        $path = str_replace('public', '', $path);

        return response()->json(['location' => "/storage{$path}"]);

        /*$imgpath = request()->file('file')->store('imgUpload', 'public'); 
        return response()->json(['location' => "/storage/$imgpath"]);*/
    }

    public function deleteUpload(Request $request)
    {
        $fileName = $request->fileName;
        if (Storage::disk('public/imgUpload')->exists($fileName)) {
            Storage::disk('public/imgUpload')->delete($fileName);
        }
        return response()->json(['success' => '刪除成功']);
    }
```

---

## 開啟圖片/檔案上傳流量限制問題   

可參考: 
https://serverfault.com/questions/611239/increase-php-fpms-max-upload-post-size   
以及   

去開啟檔案大小上傳限制

在虛擬機上找
```
 cd nginx/conf.d/
```

並且編輯   
```
vi nginx.conf

```

將 body 變肥一點(如果要限制流量攻擊), 可以參考前輩寫的:   
https://ithelp.ithome.com.tw/articles/10271702?sc=rss.iron   

```
 http {
....
    # 請求的 body 最大就是 100M
    client_max_body_size 100M;
    # 註: 通常不會讓 body 弄到 100M, 這樣太危險~
}
```

然後在各專案的 conf 檔, 例如 `xxx.conf` 可以設定個別圖片, 影片的流量限制:   
```
server {
    # 上傳圖片最高可以到 5MB
    location public/imgUpload {
        client_max_body_size 5M;
        proxy_pass http://後端位址;
    }
}
```

----


## 接著去找 `php.ini`  


使用指令 `/` 去找   
```
這兩個設定一樣大比較好
/upload_max_filesize
/post_max_size 
```

如果不擔心 body 肥大的問題的話, 檔案上傳限制調高 ↓   
![](https://i.imgur.com/Xyr7GMc.png)   
![](https://i.imgur.com/tgbtoqC.png)   


記得重啟~   
```
sudo systemctl restart php-fpm
sudo systemctl restart nginx

```

可以參考:   

[How to Validate on Max File Size in Laravel?](https://stackoverflow.com/questions/37432641/how-to-validate-on-max-file-size-in-laravel)   

https://serverfault.com/questions/611239/increase-php-fpms-max-upload-post-size   

https://stackoverflow.com/questions/58652896/laravel-file-does-not-exist-or-is-not-readable    

[status of 413 (Payload Too Large) in Laravel](https://stackoverflow.com/questions/70158235/status-of-413-payload-too-large-in-laravel)   

[Laravel API overriding default 413 Payload Too Large response](https://stackoverflow.com/questions/67258268/laravel-api-overriding-default-413-payload-too-large-response)   


[Laravel - validate file size when PHP max upload size limit is exceeded [duplicate]](https://stackoverflow.com/questions/46067336/laravel-validate-file-size-when-php-max-upload-size-limit-is-exceeded)   

---

成功的話