Nginx获取真实IP地址方法

本文涉及的产品
传统型负载均衡 CLB,每月750个小时 15LCU
Web应用防火墙 3.0,每月20元额度 3个月
EMR Serverless StarRocks,5000CU*H 48000GB*H
简介: 问题现象 测试环境 配置方式:logformat方法 配置方式:realip方法 总结 附录 问题现象 网站业务架构为: 高防->WAF->slb 7层->ECS Nginx在ECS上获取真实的客户端IP地址,配置不生效。

问题现象

网站业务架构为:

高防->WAF->slb 7层->ECS

Nginx在ECS上获取真实的客户端IP地址,配置不生效。

测试环境

高防IP为:118.xxx.xxx.204

WAF的Cname为:9qlliqgcxxxxxu0z.aliyunwaf.com 120.xxx.xxx.174 

测试的域名为:there.pier39.cn

负载均衡的IP为: 119.xxx.xxx.162

ECS的IP为:120.xxx.xxx.201

[root @xx  nginx]# uname -a
Linux iZ94ypgtdryZ  3.10 . 0 - 327.22 . 2 .el7.x86_64 # 1  SMP Thu Jun  23  17 : 05 : 11  UTC  2016  x86_64 x86_64 x86_64 GNU/Linux
[root @iZ94ypgtdryZ  nginx]# lsb_release -a
LSB Version:    :core- 4.1 -amd64:core- 4.1 -noarch
Distributor ID: CentOS
Description:    CentOS Linux release  7.2 . 1511  (Core)
Release:     7.2 . 1511
Codename:   Core
[root @xx  nginx]#
[root @iZ94ypgtdryZ  nginx]# nginx -V
nginx version: nginx/ 1.10 . 2
built by gcc  4.8 . 5  20150623  (Red Hat  4.8 . 5 - 4 ) (GCC)
built with OpenSSL  1.0 .1e-fips  11  Feb  2013
TLS SNI support enabled
configure arguments: --prefix=/usr/share/nginx --sbin-path=/usr/sbin/nginx --modules-path=/usr/lib64/nginx/modules --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --http-client-body-temp-path=/var/lib/nginx/tmp/client_body --http-proxy-temp-path=/var/lib/nginx/tmp/proxy --http-fastcgi-temp-path=/var/lib/nginx/tmp/fastcgi --http-uwsgi-temp-path=/var/lib/nginx/tmp/uwsgi --http-scgi-temp-path=/var/lib/nginx/tmp/scgi --pid-path=/run/nginx.pid --lock-path=/run/lock/subsys/nginx --user=nginx --group=nginx --with-file-aio --with-ipv6 --with-http_ssl_module --with-http_v2_module --with-http_realip_module --with-http_addition_module --with-http_xslt_module=dynamic --with-http_image_filter_module=dynamic --with-http_geoip_module=dynamic --with-http_sub_module --with-http_dav_module --with-http_flv_module --with-http_mp4_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_random_index_module --with-http_secure_link_module --with-http_degradation_module --with-http_slice_module --with-http_stub_status_module --with-http_perl_module=dynamic --with-mail=dynamic --with-mail_ssl_module --with-pcre --with-pcre-jit --with-stream=dynamic --with-stream_ssl_module --with-google_perftools_module --with-debug --with-cc-opt= '-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -m64 -mtune=generic' --with-ld-opt= '-Wl,-z,relro -specs=/usr/lib/rpm/redhat/redhat-hardened-ld -Wl,-E'

配置方式:logformat方法

1、高防、WAF、负载均衡相关的配置在此省略

2、Nginx主配置文件

/etc/nginx/nginx.conf

核心配置内容:

log_format there.pier39.cn  '$remote_addr - $remote_user [$time_local] $request'
                     '$status $body_bytes_sent "$http_referer" '
                     '"$http_user_agent" "$http_x_forwarded_for"' ;
  access_log  /var/log/nginx/there.pier39.cn there.pier39.cn;

在log_format中加入了*$http_x_forwarded_for* 

具体以上内容所在的位置,请特别注意,可以到下方完整的配置中寻找。

整体的配置内容如下:

[root @iZ94ypgtdryZ  nginx]# cat nginx.conf
# For more information on configuration, see:
#   * Official English Documentation: http: //nginx.org/en/docs/
#   * Official Russian Documentation: http: //nginx.org/ru/docs/
 
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;
 
# Load dynamic modules. See /usr/share/nginx/README.dynamic.
include /usr/share/nginx/modules/*.conf;
 
events {
     worker_connections  1024 ;
}
 
http {
     log_format  main   '$remote_addr - $remote_user [$time_local] "$request" '
                       '$status $body_bytes_sent "$http_referer" '
                       '"$http_user_agent"' ;
 
     access_log  /var/log/nginx/access.log  main;
     log_format there.pier39.cn  '$remote_addr - $remote_user [$time_local] $request'
                     '$status $body_bytes_sent "$http_referer" '
                     '"$http_user_agent" "$http_x_forwarded_for"' ;
     access_log  /var/log/nginx/there.pier39.cn there.pier39.cn;
 
     sendfile            on;
     tcp_nopush          on;
     tcp_nodelay         on;
     keepalive_timeout    65 ;
     types_hash_max_size  2048 ;
 
     include             /etc/nginx/mime.types;
     default_type        application/octet-stream;
 
     # Load modular configuration files from the /etc/nginx/conf.d directory.
     # See http: //nginx.org/en/docs/ngx_core_module.html#include
     for  more information.
     include /etc/nginx/conf.d/*.conf;
 
     server {
         listen        80  default_server;
         listen       [::]: 80  default_server;
         server_name  _;
         root         /usr/share/nginx/html;
 
         # Load configuration files  for  the  default  server block.
         include /etc/nginx/ default .d/*.conf;
 
         location / {
         }
 
         error_page  404  / 404 .html;
             location = /40x.html {
         }
 
         error_page  500  502  503  504  /50x.html;
             location = /50x.html {
         }
     }
 
# Settings  for  a TLS enabled server.
#
#    server {
#        listen        443  ssl http2 default_server;
#        listen       [::]: 443  ssl http2 default_server;
#        server_name  _;
#        root         /usr/share/nginx/html;
#
#        ssl_certificate  "/etc/pki/nginx/server.crt" ;
#        ssl_certificate_key  "/etc/pki/nginx/private/server.key" ;
#        ssl_session_cache shared:SSL:1m;
#        ssl_session_timeout  10m;
#        ssl_ciphers HIGH:!aNULL:!MD5;
#        ssl_prefer_server_ciphers on;
#
#        # Load configuration files  for  the  default  server block.
#        include /etc/nginx/ default .d/*.conf;
#
#        location / {
#        }
#
#        error_page  404  / 404 .html;
#            location = /40x.html {
#        }
#
#        error_page  500  502  503  504  /50x.html;
#            location = /50x.html {
#        }
#    }
 
}

3、VirtualHost配置文件

/etc/nginx/conf.d/there.pier39.cn.conf

server {
     listen        80 ;
     server_name there.pier39.cn;
     index index.html index.htm index.php;
     root  /var/www/html;
}

4、配置完成后

A、使用nginx检查配置文件是否正确。

B、重启nginx服务(Restart)

[root @iZ94ypgtdryZ  nginx]# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
[root @iZ94ypgtdryZ  nginx]# service nginx restart
Redirecting to /bin/systemctl restart  nginx.service
[root @iZ94ypgtdryZ  nginx]#

5、测试

A、未配置前的

[root @iZ94ypgtdryZ  nginx]# tailf there.pier39.cn  | grep -v HEAD
100.97 . 15.216  - - [ 22 /Feb/ 2017 : 14 : 52 : 30  + 0800 ] GET /ddd HTTP/ 1.0404  571  "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36"
100.97 . 15.1  - - [ 22 /Feb/ 2017 : 14 : 52 : 48  + 0800 ] GET /ddd HTTP/ 1.0404  571  "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36"
100.97 . 15.187  - - [ 22 /Feb/ 2017 : 14 : 52 : 49  + 0800 ] GET /ddd HTTP/ 1.0404  571  "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36"
100.97 . 15.59  - - [ 22 /Feb/ 2017 : 14 : 52 : 49  + 0800 ] GET /ddd HTTP/ 1.0404  571  "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36"
100.97 . 15.214  - - [ 22 /Feb/ 2017 : 14 : 52 : 49  + 0800 ] GET /ddd HTTP/ 1.0404  571  "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36"
100.97 . 15.14  - - [ 22 /Feb/ 2017 : 14 : 52 : 50  + 0800 ] GET /ddd HTTP/ 1.0404  571  "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36"

B、配置后的

100.97 . 15.181  - - [ 22 /Feb/ 2017 : 15 : 05 : 51  + 0800 ] GET /ddd HTTP/ 1.0404  571  "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36" "42.xxx.xx.201, 120.xx.xx.15, 120.xx.xx.232"
100.97 . 15.6  - - [ 22 /Feb/ 2017 : 15 : 05 : 53  + 0800 ] GET /ddd HTTP/ 1.0404  571  "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36" "42.xxx.xx.201, 120.xx.xx.15, 120.xx.xx.225"
100.97 . 15.189  - - [ 22 /Feb/ 2017 : 15 : 05 : 54  + 0800 ] GET /ddd HTTP/ 1.0404  571  "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36" "42.xx.xx.201, 120.xx.xx.15, 120.xx.xx.4"
100.97 . 15.50  - - [ 22 /Feb/ 2017 : 15 : 05 : 54  + 0800 ] GET /ddd HTTP/ 1.0404  571  "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36" "42.xxx.xxx.201, 120.xx.xx.15, 120.xx.xx.4"
100.97 . 15.11  - - [ 22 /Feb/ 2017 : 15 : 05 : 54  + 0800 ] GET /ddd HTTP/ 1.0404  571  "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36" "42.xxx..201, 120.xx.xx.15, 120.xx.xx.4"

真实的IP地址在日志的最尾部,符合log_format配置的格式

配置方式:realip方法

注:用nginx -V检查是否安装过realip模块,如果没有安装需要安装。

1、Nginx主配置文件

/etc/nginx/nginx.conf

核心内容:

log_format there.pier39.cn  '$remote_addr - $remote_user [$time_local] $request'
                     '$status $body_bytes_sent "$http_referer" '
                     '"$http_user_agent" ' ;
access_log  /var/log/nginx/there.pier39.cn there.pier39.cn;

具体以上内容所在的位置,请特别注意,可以到下方完整的配置中寻找。

全部配置文件

[root @iZ94ypgtdryZ  nginx]# cat nginx.conf
# For more information on configuration, see:
#   * Official English Documentation: http: //nginx.org/en/docs/
#   * Official Russian Documentation: http: //nginx.org/ru/docs/
 
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;
 
# Load dynamic modules. See /usr/share/nginx/README.dynamic.
include /usr/share/nginx/modules/*.conf;
 
events {
     worker_connections  1024 ;
}
 
http {
     log_format  main   '$remote_addr - $remote_user [$time_local] "$request" '
                       '$status $body_bytes_sent "$http_referer" '
                       '"$http_user_agent"' ;
 
     access_log  /var/log/nginx/access.log  main;
     log_format there.pier39.cn  '$remote_addr - $remote_user [$time_local] $request'
                     '$status $body_bytes_sent "$http_referer" '
                     '"$http_user_agent" ' ;
     access_log  /var/log/nginx/there.pier39.cn there.pier39.cn;
 
     sendfile            on;
     tcp_nopush          on;
     tcp_nodelay         on;
     keepalive_timeout    65 ;
     types_hash_max_size  2048 ;
 
     include             /etc/nginx/mime.types;
     default_type        application/octet-stream;
 
     # Load modular configuration files from the /etc/nginx/conf.d directory.
     # See http: //nginx.org/en/docs/ngx_core_module.html#include
     for  more information.
     include /etc/nginx/conf.d/*.conf;
 
     server {
         listen        80  default_server;
         listen       [::]: 80  default_server;
         server_name  _;
         root         /usr/share/nginx/html;
 
         # Load configuration files  for  the  default  server block.
         include /etc/nginx/ default .d/*.conf;
 
         location / {
         }
 
         error_page  404  / 404 .html;
             location = /40x.html {
         }
 
         error_page  500  502  503  504  /50x.html;
             location = /50x.html {
         }
     }
 
# Settings  for  a TLS enabled server.
#
#    server {
#        listen        443  ssl http2 default_server;
#        listen       [::]: 443  ssl http2 default_server;
#        server_name  _;
#        root         /usr/share/nginx/html;
#
#        ssl_certificate  "/etc/pki/nginx/server.crt" ;
#        ssl_certificate_key  "/etc/pki/nginx/private/server.key" ;
#        ssl_session_cache shared:SSL:1m;
#        ssl_session_timeout  10m;
#        ssl_ciphers HIGH:!aNULL:!MD5;
#        ssl_prefer_server_ciphers on;
#
#        # Load configuration files  for  the  default  server block.
#        include /etc/nginx/ default .d/*.conf;
#
#        location / {
#        }
#
#        error_page  404  / 404 .html;
#            location = /40x.html {
#        }
#
#        error_page  500  502  503  504  /50x.html;
#            location = /50x.html {
#        }
#    }
 
}

2、VirtualHost配置文件

在该文件中加入了location的内容,请务必注意;

server {
     listen        80 ;
     server_name there.pier39.cn;
     index index.html index.htm index.php;
     root  /var/www/html;
 
 
     location / {
 
     set_real_ip_from  0.0 . 0.0 / 0 ;
     real_ip_header  X-Forwarded-For;
     real_ip_recursive   on;
     }
 
 
}

3、配置完成后

A、使用nginx检查配置文件是否正确。

B、重启nginx服务(Restart)

4、测试

1、配置前

[root @xxx  nginx]# tailf there.pier39.cn  | grep -v HEAD
100.97 . 15.4  - - [ 22 /Feb/ 2017 : 15 : 54 : 40  + 0800 ] GET /ddd HTTP/ 1.0404  571  "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36"
100.97 . 15.180  - - [ 22 /Feb/ 2017 : 15 : 54 : 42  + 0800 ] GET /ddd HTTP/ 1.0404  571  "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36"
100.97 . 15.210  - - [ 22 /Feb/ 2017 : 15 : 54 : 45  + 0800 ] GET /ddd HTTP/ 1.0404  571  "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36"
100.97 . 15.2  - - [ 22 /Feb/ 2017 : 15 : 54 : 45  + 0800 ] GET /ddd HTTP/ 1.0404  571  "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36"

2、配置后

[root @xxx  nginx]# tailf there.pier39.cn  | grep -v HEAD
42.xxx.xx .201  - - [ 22 /Feb/ 2017 : 16 : 18 : 50  + 0800 ] GET /ddd HTTP/ 1.0404  571  "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36"
42.xx .xx .201  - - [ 22 /Feb/ 2017 : 16 : 18 : 50  + 0800 ] GET /ddd HTTP/ 1.0404  571  "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36"
42.xxx .xx .201  - - [ 22 /Feb/ 2017 : 16 : 18 : 50  + 0800 ] GET /ddd HTTP/ 1.0404  571  "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36"
42.xxx .xx .201  - - [ 22 /Feb/ 2017 : 16 : 18 : 50  + 0800 ] GET /ddd HTTP/ 1.0404  571  "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36"
42.xxx .xx .201  - - [ 22 /Feb/ 2017 : 16 : 18 : 51  + 0800 ] GET /ddd HTTP/ 1.0404  571  "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36"

总结

1、这里介绍了2中配置获取xff的方法,2种配置的差别,可以很明显的在最终测试的日志中对比出来。

logformat:

100.97 . 15.11  - - [ 22 /Feb/ 2017 : 15 : 05 : 54  + 0800 ] GET /ddd HTTP/ 1.0404  571  "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36" "42.xxx.xx.201, 120.xx.xx.15, 120.xx.xx.4"

realip:

42.xx.xx .201  - - [ 22 /Feb/ 2017 : 16 : 18 : 51  + 0800 ] GET /ddd HTTP/ 1.0404  571  "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36"

2种方式都可以获取真实IP地址,但是在日志中显示的方式不一样。

当然,也可以2种方式都配置。方法,自行脑补。

42.xx.xx .201  - - [ 22 /Feb/ 2017 : 16 : 22 : 42  + 0800 ] GET /ddd HTTP/ 1.0404  571  "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36" "42.xx.xx201, 120.xx.xxx.16, 120.xx.xx.231"

2、2种取一种即可,根据实际情况选择。

3、该方法,可用于高防->WAF->slb 7层->ECS  上述链路的使用,当然如果只有负载均衡也是可以的。在链路中再加入CDN也能够正常获取到。此方法的原理为获取通信报文中的X-Forwarded-For字段进行解析

附录

1、X-Forwarded-For简介

X-Forwarded-For:简称XFF头,它代表代表客户端,也就是HTTP的请求端真实的IP,只有在通过了HTTP 代理或者负载均衡服务器时才会添加该项。它不是RFC中定义的标准请求头信息,在squid缓存代理服务器开发文档中可以找到该项的详细介绍。

标准格式如下:X-Forwarded-For: client1, proxy1, proxy2。

2、X-Forwarded-For在http报文中的体现(Web Server上抓包)

ae2f0d0cdb788f0eda5481fd311b37f86edb8aba

相关实践学习
2分钟自动化部署人生模拟器
本场景将带你借助云效流水线Flow实现人生模拟器小游戏的自动化部署
7天玩转云服务器
云服务器ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,可降低 IT 成本,提升运维效率。本课程手把手带你了解ECS、掌握基本操作、动手实操快照管理、镜像管理等。了解产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
15天前
|
前端开发 应用服务中间件 定位技术
Nginx 如何代理转发传递真实 ip 地址?
【10月更文挑战第32天】
110 5
Nginx 如何代理转发传递真实 ip 地址?
|
3月前
|
应用服务中间件 Linux 调度
干货!几个 Nginx 性能优化方法
干货!几个 Nginx 性能优化方法
148 0
|
1月前
|
JavaScript 前端开发 应用服务中间件
vue前端开发中,通过vue.config.js配置和nginx配置,实现多个入口文件的实现方法
vue前端开发中,通过vue.config.js配置和nginx配置,实现多个入口文件的实现方法
147 0
|
3月前
|
应用服务中间件 Linux 网络安全
2022年超详细在CentOS 7上安装Nginx方法(源码安装)
这篇文章提供了在CentOS 7系统上通过源码安装Nginx的详细步骤,包括从官网下载Nginx源码包、上传至虚拟机、解压、删除压缩包、编译安装前的配置、安装PCRE库(因为Nginx使用PCRE库解析正则表达式)、安装zlib和OpenSSL库(用于支持HTTPS协议)、重新编译Nginx、安装后启动Nginx服务、关闭服务、修改默认端口、以及重启服务测试等步骤。文章还提供了相关命令和操作截图,帮助用户更好地理解和执行安装过程。
2022年超详细在CentOS 7上安装Nginx方法(源码安装)
|
2月前
|
Ubuntu 应用服务中间件 数据库
Nginx配置:阻止非国内IP地址访问的设置方法
此外,出于用户隐私和法律合规性的考虑,应慎重考虑阻止特定国家或地区IP地址的决策。在某些情况下,这可能被视为歧视性或违反当地法律。
155 2
|
3月前
|
应用服务中间件 Linux nginx
在Linux中,如何统计ip访问情况?分析 nginx 访问日志?如何找出访问页面数量在前十位的ip?
在Linux中,如何统计ip访问情况?分析 nginx 访问日志?如何找出访问页面数量在前十位的ip?
|
3月前
|
关系型数据库 MySQL 应用服务中间件
在Ubuntu 16.04上使用Nginx安装和保护phpMyAdmin的方法
在Ubuntu 16.04上使用Nginx安装和保护phpMyAdmin的方法
33 0
|
Web App开发 应用服务中间件 nginx
|
应用服务中间件 PHP Apache
|
28天前
|
应用服务中间件 BI nginx
Nginx的location配置详解
【10月更文挑战第16天】Nginx的location配置详解