Nginx 的两种认证方式
简介:
今天来研究一下 Nginx 的两种认证方式。
1、auth_basic 本机认证
2、ngx_http_auth_request_module 第三方认证
一、安装 Nginx
- shell > sh auto.sh install nginx
- install_nginx(){
- yum -y install gcc gcc-c++ wget make pcre-devel zlib-devel openssl-devel
- id www-data > /dev/null >& || useradd -r -s /sbin/nologin www-data
- cd /usr/local/src; wget -qc http://nginx.org/download/nginx-1.10.2.tar.gz || exit 9
- tar zxf nginx-1.10..tar.gz; cd nginx-1.10.
- ./configure --prefix=/usr/local/nginx-1.10. \
- --with-http_dav_module \
- --with-http_ssl_module \
- --with-http_realip_module \
- --with-http_gzip_static_module \
- --with-http_stub_status_module \
- --with-http_degradation_module \
- --with-http_auth_request_module && make && make install
- mkdir /usr/local/nginx-1.10./conf/vhost; mkdir -p /data/logs/nginx
- mkdir -p /data/git-webroot/{api-htdocs,web-htdocs} && chown -R www-data.www-data /data/git-webroot
- echo "/usr/local/nginx-1.10.2/sbin/nginx" >> /etc/rc.local
- }
二、auth_basic 本机认证
- shell > yum -y install httpd-tools # 安装 htpasswd 工具
- shell > cd /usr/local/nginx-1.10./conf
- shell > htpasswd -c pass.db wang # 创建认证用户 wang 并输入密码,添加用户时输入 htpasswd pass.db username
- shell > vim /usr/local/nginx-1.10./conf/vhost/local.conf
- server {
- listen ;
- server_name local.server.com;
- auth_basic "User Authentication";
- auth_basic_user_file /usr/local/nginx-1.10./conf/pass.db;
- location / {
- root /data/www;
- index index.html;
- }
- }
# 这样就实现了本机认证,需要维护 pass.db 文件
三、ngx_http_auth_request_module 第三方认证
# 编译 Nginx 时需要添加该模块 --with-http_auth_request_module
# 该模块可以将客户端输入的用户名、密码 username:password 通过 Base64 编码后写入 Request Headers 中
# 例如:wang:wang -> Authorization:Basic d2FuZzp3YW5n=
# 然后通过第三方程序解码后跟数据库中用户名、密码进行比较,Nginx 服务器通过 header 的返回状态判断是否认证通过。
- shell > vim /usr/local/nginx-1.10./conf/vhost/local.conf # 我们先来编辑本机配置文件,也就是用户直接访问的域名
- server {
- listen ;
- server_name local.server.com;
- auth_request /auth;
- location / {
- root html;
- index index.html;
- }
- location /auth {
- proxy_pass http://auth.server.com/HttpBasicAuthenticate.php;
- proxy_pass_request_body off;
- proxy_set_header Content-Length "";
- proxy_set_header X-Original-URI $request_uri;
- }
- }
# auth_request /auth; # 启用认证
# proxy_pass http://auth.server.com/HttpBasicAuthenticate.php; # 认证服务器地址
# 参考地址:http://nginx.org/en/docs/http/ngx_http_auth_request_module.html
- shell > vim /usr/local/nginx-1.10./conf/vhost/auth.conf # 这是第三方认证服务器,认证逻辑使用的 PHP 代码
- server {
- listen ;
- server_name auth.server.com;
- location ~ \.php$ {
- fastcgi_pass 127.0.0.1:;
- fastcgi_index index.php;
- fastcgi_param SCRIPT_FILENAME /usr/local/nginx-1.10./html$fastcgi_script_name;
- include fastcgi_params;
- }
- }
- shell > vim /usr/local/nginx-1.10./html/HttpBasicAuthenticate.php
- <?php
- if(isset($_SERVER['PHP_AUTH_USER'], $_SERVER['PHP_AUTH_PW'])){
- $username = $_SERVER['PHP_AUTH_USER'];
- $password = $_SERVER['PHP_AUTH_PW'];
- if ($username == 'wang' && $password == ''){
- return true;
- }
- }
- header('WWW-Authenticate: Basic realm="Git Server"');
- header('HTTP/1.0 401 Unauthorized');
- ?>
# 用户访问 local.server.com 弹出框中输入的用户名、密码保存在 $_SERVER 变量中
# 中间 if 段,只做演示用,工作中应该是拿用户输入的用户名、密码跟数据库中的数据做比较
# 用户访问 local.server.com 就会去 auth.servere.com 做用户认证,认证通过后继续访问 local.server.com
# 目前 Nginx 的第三方认证,工作中自己搭建的 git + gitweb 在使用中,配置文件如下:( 认证逻辑大家使用自己喜欢的语言编写即可 )
- shell > vim /usr/local/nginx-1.10./conf/vhost/git.server.com
- server {
- listen ;
- server_name git.server.com;
- root /usr/local/share/gitweb;
- client_max_body_size 50m;
- #auth_basic "Git User Authentication";
- #auth_basic_user_file /usr/local/nginx-1.10./conf/pass.db;
- auth_request /auth;
- location ~ ^.*\.git/objects/([-9a-f]+/[-9a-f]+|pack/pack-[-9a-f]+.(pack|idx))$ {
- root /data/git;
- }
- location ~ /.*\.git/(HEAD|info/refs|objects/info/.*|git-(upload|receive)-pack)$ {
- root /data/git;
- fastcgi_pass unix:/var/run/fcgiwrap.socket;
- fastcgi_connect_timeout 24h;
- fastcgi_read_timeout 24h;
- fastcgi_send_timeout 24h;
- fastcgi_param SCRIPT_FILENAME /usr/local/libexec/git-core/git-http-backend;
- fastcgi_param PATH_INFO $uri;
- fastcgi_param GIT_HTTP_EXPORT_ALL "";
- fastcgi_param GIT_PROJECT_ROOT /data/git;
- fastcgi_param REMOTE_USER $remote_user;
- include fastcgi_params;
- }
- try_files $uri @gitweb;
- location @gitweb {
- fastcgi_pass unix:/var/run/fcgiwrap.socket;
- fastcgi_param GITWEB_CONFIG /etc/gitweb.conf;
- fastcgi_param SCRIPT_FILENAME /usr/local/share/gitweb/gitweb.cgi;
- fastcgi_param PATH_INFO $uri;
- include fastcgi_params;
- }
- location /auth {
- proxy_pass http://auth.server.com/HttpBasicAuthenticate.php;
- proxy_pass_request_body off;
- proxy_set_header Content-Length "";
- proxy_set_header X-Original-URI $request_uri;
- }
- }
# End
Nginx 的两种认证方式的更多相关文章
- php 与 nginx 的两种处理方式
1.IP:Port 监听方式 php-fpm docker pull PHP:2.4-alpine nginx.conf fastcgi_pass 127.0.0.1:9000; php-fpm 在容 ...
- git使用ssh密钥和https两种认证方式汇总(转)
在版本库的SSH方式和HTTPS方式是不同的,具体来说就是url信息的不同,但是,实际的认证机制也是不同的.当建立了本机密钥之后,使用ssh方式实际上是不需要再次认证的,而https则每次需要输入密码 ...
- [Linux]PHP-FPM与NGINX的两种通讯方式
一.通过监听TCP端口通讯 php-fpm.d/www.conf ; The address on which to accept FastCGI requests. ; Valid syntaxes ...
- 使用IdentityServer4,在一个ASPNetCore项目中,配置oidc和api的AccessToken两种认证授权
1.配置两种认证方式 JwtSecurityTokenHandler.DefaultInboundClaimTypeMap.Clear(); services.AddAuthentication(op ...
- Web APi之认证(Authentication)两种实现方式【二】(十三)
前言 上一节我们详细讲解了认证及其基本信息,这一节我们通过两种不同方式来实现认证,并且分析如何合理的利用这两种方式,文中涉及到的基础知识,请参看上一篇文中,就不再叙述废话. 序言 对于所谓的认证说到底 ...
- 转 Web APi之认证(Authentication)两种实现方式【二】(十三)
前言 上一节我们详细讲解了认证及其基本信息,这一节我们通过两种不同方式来实现认证,并且分析如何合理的利用这两种方式,文中涉及到的基础知识,请参看上一篇文中,就不再废叙述废话. 序言 对于所谓的认证说到 ...
- Nginx 和 PHP 的两种部署方式比较
2种部署方式简介 第一种 前置1台nginx服务器做HTTP反向代理和负载均衡 后面多态服务器部署Nginx Web服务和php-fpm提供的fast cgi服务 第二种 前置1台nginx服务器做W ...
- Java使用SFTP和FTP两种连接方式实现对服务器的上传下载 【我改】
[]如何区分是需要使用SFTP还是FTP? []我觉得: 1.看是否已知私钥. SFTP 和 FTP 最主要的区别就是 SFTP 有私钥,也就是在创建连接对象时,SFTP 除了用户名和密码外还需要知道 ...
- wdcp支持两种安装方式
v3.2版本已发布,支持多PHP版本共存共用,支持SSL证书,更多可看论坛 v3版讨论区 更多安装说明请看 http://www.wdlinux.cn/bbs/thread-57643-1-1.htm ...
随机推荐
- [leetcode]33. Search in Rotated Sorted Array旋转过有序数组里找目标值
Suppose an array sorted in ascending order is rotated at some pivot unknown to you beforehand. (i.e. ...
- Iris数据集实战
本次主要围绕Iris数据集进行一个简单的数据分析, 另外在数据的可视化部分进行了重点介绍. 环境 win8, python3.7, jupyter notebook 目录 1. 项目背景 2. 数据概 ...
- jQuery的介绍
01-jQuery的介绍 1.为什么要使用jQuery 在用js写代码时,会遇到一些问题: window.onload 事件有事件覆盖的问题,因此只能写一个事件. 代码容错性差. 浏览器兼容性问题 ...
- jenkins shell部署
jenkins执行shell脚本 jenkins执行shell 上一篇说的是jenkins+svn+maven把war包自动部署到Tomcat,这篇是从SVN上拉取代码maven生成jar文件,并且拷 ...
- ArrayList 初探
1.ArrayList继承AbstractList,实现List.RandomAccess.Cloneable.Serializable接口 public class ArrayList<E&g ...
- linux学习第七天 (Linux就该这么学)
今天讲了chmod (权限 设置)和 chown(属性 设置),特殊权限:SUID u+s 数字法是4 x=s - = S,SGID g+s 数字法是2 x=s -=S,SBIT o+t x=t ...
- Redhat/Centos6.x安装Chrome
由于Chrome对rhel6.x不在支持发布版本,只能安装chromium版本! 01.下载地址 http://people.centos.org/hughesjr/chromium/6/x86_64 ...
- java多线程系列7 高级同步工具(1)信号量Semaphore
Semaphore叫做信号量 可以控制某个资源可被同时访问的个数, acquire() 获取一个许可,得到许可才能执行后面的代码,如果没有就等待. release() 释放一个许可. 当信号量的只允许 ...
- spring与junit整合测试
1.导包4+2+aop+test 2.配置注解 3.测试
- ABP框架系列之三十一:(Localization-本地化)
Introduction Any application has at least one language for user interface. Many applications have mo ...