nginx ssl 設定

這採用兩階段設定
第一步先拿到80 port 然後轉 443
話不多說 直接看設定檔

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
server {
  listen 80 ;
    server_name example.shop;
 
    # redirects both www and non-www to https
    return 301 https://$server_name$request_uri;
 
}
 
server {
 
    listen 443 ssl;
    server_name  example.shop;
 
    #ssl 設定
    ssl on;
    #ssl 認證 ,憑證中心發給的crt檔
    ssl_certificate /etc/nginx/ssl/example.shop.crt;
    #產生ssl的認證前 所使用的private key
    ssl_certificate_key /etc/nginx/ssl/example.shop.key;
    root   /var/www/public_html/;
    index  index.php index.html index.htm;
 
    error_log  /var/log/nginx/example.shop_error.log  warn;
 
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }
 
    location ~ \.php$ {
        fastcgi_read_timeout 3600;
        fastcgi_pass   php-fpm-sock;
        fastcgi_index  index.php;
        include        fastcgi_params;
        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
    }
 
}

laravel validator note – unique與exists

laravel validator 這兩個功能非常的強大阿~~~

unique >輸入值必須是唯一值

exists >輸入值必須存在

他可以透過orm的方式讀取db資料,然後判斷輸入的值是否存在於資料表中,根本是大神級的好用阿

範例
id值必須存在否則輸出錯誤
exists:table名稱,欄位名稱

1
2
3
4
5
6
7
8
9
10
11
12
$info['id']=10; 
$validator = Validator::make(
            $info,
            [
                'id' => 'exists:table_name,id',
 
            ]
        );
if ($validator->fails()) {
            return response()->json(['status'=>422,'message'=>'Validate Error','errors'=>$validator->errors()],422,[],JSON_UNESCAPED_UNICODE);
 
}

範例
帳號是否存在,存在則輸出錯誤
unique :table名稱,欄位名稱

1
2
3
4
5
6
7
8
9
10
11
12
$info['username']='Mike'; 
$validator = Validator::make(
            $info,
            [
                'id' => 'unique :table_name,username',
 
            ]
        );
if ($validator->fails()) {
            return response()->json(['status'=>422,'message'=>'Validate Error','errors'=>$validator->errors()],422,[],JSON_UNESCAPED_UNICODE);
 
        }

laravel validator note – regex rule

laravel的 Validator是個強大的工具
但是他在用regxp2的時候,會有一個特殊的寫法
他必須是要用陣列
否則會出現
preg_match(): No ending delimiter ‘/’ found

這個是一般的寫法
用|增加RULE

1
$ruleArr['id']= 'required|numeric|exists:book,id';

這個是REGXP的寫法

1
$ruleArr['version']=["required","regex:/^(\d+\.)?(\d+\.)?(\*|\d+)$/"];

laravel 清除cache

laravel 幾種cache清除指令

基本 cache
$ php artisan cache:clear

route cache
$ php artisan route:cache

config cache
在新刪修config以後要重新跑一次

$ php artisan config:cache

laravel 5.6 以後廢棄的優化指令,5.4以前通用 ,5.5以後因為走了php 7,這個版本對op-cache有最佳化,所以廢了

$ php artisan optimize

laravel 5.6 passport Unauthenticated

基本上問題在access token

預設安裝的情況下,laravel使用的grant_type是passport
所以在大多數的教學中,他需要先登入後取得access_token, 然後再設定header使用 Authorization: Bearer access_token
BUT
如果你使用的是client_credentials….
你就會拿到UNAUTHENTICATED

需要調整相關的設定
1.app/Http/Kernel.php
增加以下程式
use Laravel\Passport\Http\Middleware\CheckClientCredentials;
protected $routeMiddleware = [
‘client’ => CheckClientCredentials::class,
];

2.修改api route middlerware

Route::get(‘/user’, function(Request $request) {

})->middleware(‘client’);

把middleware改成client即可

docker ip 查詢 – how to get docker container’s ip

大部分查詢docker ip的時候 都是用 docker-machine

docker-machine ip [machine name]

但是如果沒有docker machine呢?

使用指令
docker inspect

先查詢docker container
docker ps -a

4aed2ceb06c0 mysql:5.7 “docker-entrypoint.s…” 12 minutes ago Up 12 minutes 127.0.0.1:3306->3306/tcp mysql57

docker inspect mysql57

[以上省略]

“Gateway”: “172.20.0.1”,
“IPAddress”: “172.20.0.2”,

這樣就可以知道 container ip 是多少了