使用Nginx 對Laravel 進行負載

項目環境php7.2, nginx , Laravel,開發的微信公衆號應用 。目前訪問量的上升,單臺服務器不能知足需求,因而用nginx作了負載。如下是一種可行性方案,目前正在使用。

session共享的問題 參考Laravel使用Redis共享Sessionphp

有兩臺web服務器 A:10.0.0.2 , B:10.0.0.3,系統的域名爲 www.c.com,使用A使用爲反向代理服務器

A服務器的nginx配置

server {
listen 81;
server_name _;

index index.html index.htm index.php;
access_log /data/wwwroot/wwwlogs/www_nginx.log combined;
root /data/wwwroot/www/public;

location / {
    try_files $uri $uri/ /index.php?$query_string;
}
location ~ .*\.(php|php5)?$ {
   fastcgi_pass unix:/dev/shm/php-cgi.sock;
    fastcgi_index index.php;
    include fastcgi.conf;

    }
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|flv|ico)$ {
    expires 30d;
    access_log off;
    }
location ~ .*\.(js|css)?$ {
    expires 7d;
    access_log off;
    }
}

B服務器nginx設置

server {
listen 80;
server_name -;

index index.html index.htm index.php;
access_log /data/wwwlogs/www_nginx.log combined;
root /data/wwwroot/www/public;

location / {
    try_files $uri $uri/ /index.php?$query_string;
}
location ~ .*\.(php|php5)?$ {
 
   fastcgi_pass unix:/dev/shm/php-cgi.sock;
    fastcgi_index index.php;
    include fastcgi.conf;
    }
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|flv|ico)$ {
    expires 30d;
    access_log off;
    }
location ~ .*\.(js|css)?$ {
    expires 7d;
    access_log off;
    }
}

A 服務器上的反向代理服務器設置

upstream backend{
	ip_hash;
	server 127.0.0.1:81;
	server 10.0.0.3;
}
server {
listen 80;
server_name www.c.com;

index index.html index.htm index.php;
access_log /data/wwwroot/wwwlogs/www_nginx.log combined;
root /data/wwwroot/www/public;

location / {
    proxy_pass http://backend;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header REMOTE-HOST $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
location ~ .*\.(php|php5)?$ {
    fastcgi_pass unix:/dev/shm/php-cgi.sock;
    fastcgi_index index.php;
    include fastcgi.conf;
    }
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|flv|ico)$ {
    expires 30d;
    access_log off;
    }
location ~ .*\.(js|css)?$ {
    expires 7d;
    access_log off;
    }
}

若是是作微信公衆號,使用了easywechat,須要把backend 代換爲你的www.c.com 這樣才能支持微信受權。 微信的access_token須要使用redis共享,easywechat默認使用laravel 的緩存,因此須要把.env的緩存改爲使用redis CACHE_DRIVER=rediscss

Laravel 中使用 Request::getClientIp()獲取到的IP不是真實的IP,須要修改app/Providers/AppServiceProvider.php,設置信任代理服務器的IP(127.0.0.1,10.0.0.2),就能夠使用Request::getClientIp()獲真實IP了。

public function boot()
    {
        \Request::setTrustedProxies(['127.0.0.1','10.0.0.2']);
    }
相關文章
相關標籤/搜索