Browse Source

feat: configfile of nginx

master
Dnomd343 3 years ago
parent
commit
90abf32598
  1. 134
      README.md
  2. 48
      conf/nginx/README.md
  3. 73
      conf/nginx/methodA/ip-sub.func
  4. 13
      conf/nginx/methodA/ip.conf
  5. 83
      conf/nginx/methodB/ip.conf

134
README.md

@ -6,16 +6,20 @@
客户端可直接向服务器询问自己的IP地址,同时可指定任意IP地址获取其详细信息。 客户端可直接向服务器询问自己的IP地址,同时可指定任意IP地址获取其详细信息。
## 使用方法 ## 如何使用
### 命令行模式 ### 命令行模式
``` ```
# 查询自己的IP # 查询客户端IP
shell> curl ip.343.re shell> curl ip.343.re
··· ···
# 查询自己IP的详细信息 # 查询客户端UA
shell> curl ip.343.re/ua
···
# 查询客户端IP的详细信息
shell> curl ip.343.re/info shell> curl ip.343.re/info
··· ···
@ -34,6 +38,12 @@ shell> curl ip.343.re/8.8.8.8
## 如何部署 ## 如何部署
> 若你想用自己的域名建立一个类似的服务,可按如下方式部署
### Docker方式
待补充...
### 常规方式 ### 常规方式
首先拉取仓库到你的服务器上,这里以 `/var/www/echoIP` 为例 首先拉取仓库到你的服务器上,这里以 `/var/www/echoIP` 为例
@ -59,124 +69,22 @@ shell> wget --version
···wget版本信息··· ···wget版本信息···
``` ```
配置网页服务器代理,这里以Nginx为例 配置网页服务器代理,这里提供[Nginx示例](https://github.com/dnomd343/echoIP/blob/main/conf/nginx/README.md)
```
# 进入nginx配置目录
shell> cd /etc/nginx/conf.d
shell> vim ip.conf
···
shell> vim ip.func
···
```
写入配置文件 ## 开发资料
`/etc/nginx/conf.d/ip.conf` ### ipinfo.io
``` 待补充...
server {
listen 80;
server_name ip.343.re; # 改为自己的域名
include conf.d/ip.func;
}
server {
listen 443 ssl http2;
server_name ip.343.re; # 改为自己的域名
ssl_certificate /etc/ssl/certs/343.re/fullchain.pem; # 改为自己的证书
ssl_certificate_key /etc/ssl/certs/343.re/privkey.pem;
include conf.d/ip.func;
}
```
`/etc/nginx/conf.d/ip.func`
```
root /var/www/echoIP;
location = / {
if ($http_user_agent ~* (curl|wget)) {
return 200 $remote_addr\n;
}
if ($scheme = http) {
return 301 https://$server_name;
}
index index.html;
}
location = /ua {
if ($http_user_agent ~* (curl|wget)) {
return 200 $http_user_agent\n;
}
default_type application/json;
return 200 $http_user_agent;
}
location = /ip {
if ($http_user_agent ~* (curl|wget)) {
return 200 $remote_addr\n;
}
if ($scheme = http) {
return 301 https://$server_name/ip;
}
return 200 $remote_addr;
}
location ~* ^/([^/]+?)$ {
set $request_ip $1;
if ($http_user_agent ~* (curl|wget)) {
proxy_pass https://ip.343.re/info/$request_ip; # 改成自己的域名
break;
}
if ($scheme = http) {
return 301 https://$server_name$request_uri;
}
}
location ^~ /info {
set $is_cli 0;
set $is_https 0;
set $is_legal 0;
if ($uri ~* ^/info/?$) {
set $is_legal 1;
set $query ip=$remote_addr;
}
if ($uri ~* ^/info/([^/]+?)$) {
set $is_legal 1;
set $query ip=$1;
}
if ($is_legal = 0) {
return 404;
}
if ($scheme = https) {
set $is_https 1;
}
if ($http_user_agent ~* (curl|wget)) {
set $is_cli 1;
set $query $query&cli=true;
}
set $flag_https_cli $is_https$is_cli;
if ($flag_https_cli = 00) {
return 301 https://$server_name$request_uri;
}
include fastcgi_params;
fastcgi_pass 127.0.0.1:9000;
fastcgi_param QUERY_STRING $query;
fastcgi_param SCRIPT_FILENAME /var/www/echoIP/backend/queryInfo.php;
}
```
重启Nginx服务 ### IPIP.net
``` 待补充...
shell> nginx -s reload
```
### Docker方式 ### 纯真IP库
待补充... 待补充...
## 许可证 ## 许可证
MIT [@dnomd343](https://github.com/dnomd343) [@ShevonKuan](https://github.com/ShevonKuan) MIT ©2021 [@dnomd343](https://github.com/dnomd343) [@ShevonKuan](https://github.com/ShevonKuan)

48
conf/nginx/README.md

@ -0,0 +1,48 @@
## Nginx配置
### 方式A
需要两个配置文件 `ip.conf``ip-sub.func`
```
# 进入nginx配置目录
shell> cd /etc/nginx/conf.d
# 从代码仓库复制配置文件
shell> cp /var/www/echoIP/conf/nginx/methodA/ip.conf ./
shell> cp /var/www/echoIP/conf/nginx/methodB/ip-sub.func ./
# 修改配置文件,将ip.343.re改为需要部署的域名
shell> vim ip.conf
···
shell> vim ip-sub.func
···
```
重启Nginx服务
```
shell> nginx -s reload
```
### 方式B
需要一个配置文件 `ip.conf` ,但需要额外占用除80与443之外的一个端口,默认为TCP/1601,可按需修改
```
# 进入nginx配置目录
shell> cd /etc/nginx/conf.d
# 从代码仓库复制配置文件
shell> cp /var/www/echoIP/conf/nginx/methodB/ip.conf ./
# 修改配置文件,将ip.343.re改为需要部署的域名
shell> vim ip.conf
···
```
重启Nginx服务
```
shell> nginx -s reload
```

73
conf/nginx/methodA/ip-sub.func

@ -0,0 +1,73 @@
root /var/www/echoIP;
resolver 8.8.8.8;
location = / {
if ($http_user_agent ~* (curl|wget)) {
return 200 $remote_addr\n;
}
if ($scheme = http) {
return 301 https://$server_name;
}
index index.html;
}
location = /ua {
if ($http_user_agent ~* (curl|wget)) {
return 200 $http_user_agent\n;
}
default_type application/json;
return 200 $http_user_agent;
}
location = /ip {
if ($http_user_agent ~* (curl|wget)) {
return 200 $remote_addr\n;
}
if ($scheme = http) {
return 301 https://$server_name/ip;
}
return 200 $remote_addr;
}
location ~* ^/([^/]+?)$ {
set $request_ip $1;
if ($http_user_agent ~* (curl|wget)) {
proxy_pass https://ip.343.re/info/$request_ip; # 改成自己的域名
break;
}
if ($scheme = http) {
return 301 https://$server_name$request_uri;
}
}
location ^~ /info {
set $is_cli 0;
set $is_https 0;
set $is_legal 0;
if ($uri ~* ^/info/?$) {
set $is_legal 1;
set $query ip=$remote_addr;
}
if ($uri ~* ^/info/([^/]+?)$) {
set $is_legal 1;
set $query ip=$1;
}
if ($is_legal = 0) {
return 404;
}
if ($scheme = https) {
set $is_https 1;
}
if ($http_user_agent ~* (curl|wget)) {
set $is_cli 1;
set $query $query&cli=true;
}
set $flag_https_cli $is_https$is_cli;
if ($flag_https_cli = 00) {
return 301 https://$server_name$request_uri;
}
include fastcgi_params;
fastcgi_pass 127.0.0.1:9000; # php-fpm接口
fastcgi_param QUERY_STRING $query;
fastcgi_param SCRIPT_FILENAME /var/www/echoIP/backend/queryInfo.php;
}

13
conf/nginx/methodA/ip.conf

@ -0,0 +1,13 @@
server {
listen 80;
server_name ip.343.re; # 改为自己的域名
include conf.d/ip-sub.func;
}
server {
listen 443 ssl http2;
server_name ip.343.re; # 改为自己的域名
ssl_certificate /etc/ssl/certs/343.re/fullchain.pem; # 改为自己的证书
ssl_certificate_key /etc/ssl/certs/343.re/privkey.pem;
include conf.d/ip-sub.func;
}

83
conf/nginx/methodB/ip.conf

@ -0,0 +1,83 @@
server {
listen 80;
server_name ip.343.re; # 改为自己的域名
location / {
if ($http_user_agent !~* (curl|wget)) {
return 301 https://$server_name$request_uri;
}
proxy_set_header X-Real-IP $remote_addr;
proxy_pass http://127.0.0.1:1601; # 自定义端口
}
}
server {
listen 443 ssl http2;
server_name ip.343.re; # 改为自己的域名
ssl_certificate /etc/ssl/certs/343.re/fullchain.pem; # 改为自己的证书
ssl_certificate_key /etc/ssl/certs/343.re/privkey.pem;
location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_pass http://127.0.0.1:1601; # 自定义端口
}
}
server {
listen 1601; # 自定义端口
root /var/www/echoIP;
set_real_ip_from 0.0.0.0/0;
real_ip_header X-Real-IP;
location = / {
if ($http_user_agent ~* (curl|wget)) {
return 200 $remote_addr\n;
}
index index.html;
}
location = /ua {
if ($http_user_agent ~* (curl|wget)) {
return 200 $http_user_agent\n;
}
default_type application/json;
return 200 $http_user_agent;
}
location = /ip {
if ($http_user_agent ~* (curl|wget)) {
return 200 $remote_addr\n;
}
return 200 $remote_addr;
}
location ~* ^/([^/]+?)$ {
set $request_ip $1;
if ($http_user_agent ~* (curl|wget)) {
proxy_pass http://127.0.0.1:1601/info/$request_ip; # 自定义端口
}
}
location ^~ /info {
set $is_cli 0;
set $is_https 0;
set $is_legal 0;
if ($uri ~* ^/info/?$) {
set $is_legal 1;
set $query ip=$remote_addr;
}
if ($uri ~* ^/info/([^/]+?)$) {
set $is_legal 1;
set $query ip=$1;
}
if ($is_legal = 0) {
return 404;
}
if ($http_user_agent ~* (curl|wget)) {
set $query $query&cli=true;
}
include fastcgi_params;
fastcgi_pass 127.0.0.1:9000; # php-fpm接口
fastcgi_param QUERY_STRING $query;
fastcgi_param SCRIPT_FILENAME /var/www/echoIP/backend/queryInfo.php;
}
}
Loading…
Cancel
Save