Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/yidas/php-client-ip
Get client IP with safe and coincident way from server even behind Proxy or Load-Balancer
https://github.com/yidas/php-client-ip
ip load-balancer php proxy real-ip trust-proxies
Last synced: about 1 month ago
JSON representation
Get client IP with safe and coincident way from server even behind Proxy or Load-Balancer
- Host: GitHub
- URL: https://github.com/yidas/php-client-ip
- Owner: yidas
- License: mit
- Created: 2017-06-28T10:27:04.000Z (over 7 years ago)
- Default Branch: master
- Last Pushed: 2019-01-14T01:50:31.000Z (almost 6 years ago)
- Last Synced: 2024-10-04T06:47:50.085Z (about 1 month ago)
- Topics: ip, load-balancer, php, proxy, real-ip, trust-proxies
- Language: PHP
- Homepage:
- Size: 11.7 KB
- Stars: 23
- Watchers: 2
- Forks: 10
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
*php* Client IP
===============Get client IP with safe and coincident way from server even behind Proxy or Load-Balancer.
[![Latest Stable Version](https://poser.pugx.org/yidas/client-ip/v/stable?format=flat-square)](https://packagist.org/packages/yidas/client-ip)
[![License](https://poser.pugx.org/yidas/client-ip/license?format=flat-square)](https://packagist.org/packages/yidas/client-ip)
[![Total Downloads](https://poser.pugx.org/yidas/client-ip/downloads?format=flat-square)](https://packagist.org/packages/yidas/client-ip)
[![Monthly Downloads](https://poser.pugx.org/yidas/client-ip/d/monthly?format=flat-square)](https://packagist.org/packages/yidas/client-ip)Real IP implement on Web application, which solve the problem that the server receiving requests through trust proxies or load-balancers without Transparent-Mode.
---
DEMONSTRATION
-------------```php
echo ClientIP::get();
ClientIP::config([
'proxyIPs' => ['192.168.0.0/16', '172.217.3.11'],
'headerKeys' => ['HTTP_X_FORWARDED_FOR']
]);
echo ClientIP::get();
```If the client IP is `203.169.1.37`, there are some connection situation for demonstrating referring by above sample code:
### Load-Balancer normal network
your server is behind a Load-Balencer and in a private network.
| Client | Load-Balancer | Server |
|:--------------:|:--------------:|:-------------:|
| 203.169.1.37 → | 172.217.2.88 ↓ | |
| | 192.168.0.10 → | 192.168.4.100 |```php
ClientIP::config([
'proxyIPs' => true
]);
```Setting `proxyIPs` as `true` means all requests are go through Load-balancer, which will always get forward IP, same as above setting:
```php
ClientIP::config([
'proxyIPs' => ['0.0.0.0/32']
]);
```**The result from the server:**
```
192.168.0.10 //Before setting the config
203.169.1.37 //After setting the config, get the forward IP
```### Proxy optional network
If your server is in public network, not only receives requests directly, but also supports trust proxies for going through:
| | Client | Proxy | Server |
|:---:|:--------------:|:--------------:|:-------------:|
|Way 1| 203.169.1.37 → | | 172.217.4.100 |
|Way 2| 203.169.1.37 → | 172.217.2.89 ↓ | |
| | | 172.217.3.11 → | 172.217.4.100 |```php
ClientIP::config([
'proxyIPs' => ['172.217.3.11']
]);
```**The result from the server**
- Way 1: Client connect to server directly:
```
203.169.1.37 //Before setting the config
203.169.1.37 //The request IP is not from proxyIPs, so identify as a Client.
```- Way 2: Client connect to server through Proxy:
```
172.217.3.11 //Before setting the config
203.169.1.37 //The request IP comes from proxyIPs, get the forward IP.
```---
INSTALLATION
------------Run Composer in your project:
composer require yidas/client-ip
Then initialize it at the bootstrap of application such as `config` file:```php
require __DIR__ . '/vendor/autoload.php';
ClientIP::config([
'proxyIPs' => ['192.168.0.0/16']
]);
```---
CONFIGURATION
-------------Example configuration:
```php
ClientIP::config([
'proxyIPs' => ['192.168.0.0/16', '172.217.2.89'],
'headerKeys' => ['HTTP_X_FORWARDED_FOR'],
]);
```| Attribute | Type | Description |
|-----------|-------|-------------|
|proxyIPs |array |Trust Proxies' IP list, which support subnet mask for each IP set.|
|headerKeys |array |Header Key list for IP Forward.|---
DISCUSSION
----------### Implement from Web Server
The another way to fetch real IP is implemnet from the Web server side:
- [Nginx: ngx_http_realip_module](http://nginx.org/en/docs/http/ngx_http_realip_module.html)
- [Apache: mod_remoteip](https://httpd.apache.org/docs/trunk/mod/mod_remoteip.html)