一直以来都是在印象笔记等记录、总结,很早以前就想写分享文章,但本身拖延太严重,明日复明日,已经9102年了,决定先从之前部分笔记搬家开始,先迈出第一步😂。
本文主要介绍经过Apache+cgi实现ubuntu环境下搭建DDNS服务器,主要包含3个部分:环境搭建、系统设计以及具体实现。html
以下图所示,服务器环境主要分如下4步完成:mysql
1.1 第一步:安装apachelinux
执行命令行
sudo apt-get install apache2复制代码
1.2 第二步:配置apache支持cgi程序
ios
配置apache运行cgi程序可分为两种状况:正则表达式
操做以下:算法
执行命令,打开apache下default配置
sudo gedit /etc/apache2/sites-available/default修改前代码块:ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/<Directory "/usr/lib/cgi-bin">AllowOverride NoneOptions ExecCGI -MultiViews +SymLinksIfOwnerMatchOrder allow,denyAllow from all</Directory>要使/var/www/cgi-bin/这个目录下能够运行CGI, 则修改后为:
## 用 ScriptAlias 指令设置 ##
ScriptAlias /cgi-bin/ /var/www/cgi-bin/## 用 Options 显示设置 ##
<Directory "/var/www/cgi-bin/">AllowOverride NoneOptions +ExecCGI -MultiViews +SymLinksIfOwnerMatchOrder allow,denyAllow from all</Directory> 设置执行命令,重启Apache服务sudo /etc/init.d/apache2 restart 复制代码
执行命令
sudo apt-get install mysql-server mysql-client复制代码
友情提示: apt-get程序会自动下载安装最新的mysql版本。在安装的最后,它会要求里输入root的密码,注意,这里的root密码是指你要给MySQL设定的root密码。
sql
1.4 第四步:设置Ubuntu文件执行读写权限数据库
LAMP组建安装好以后,PHP网络服务器根目录默认设置是在:/var/www。因为Linux系统的安全性原则,改目录下的文件读写权限是只容许root用户操做的,因此咱们不能在www文件夹中新建修改和删除文件,必需要先修改/var/www目录的读写权限。在界面管理器中经过右键属性不能修改文件权限,得执行root终端命令。
apache
执行命令
sudo chmod 777 /var/www复制代码
至此,服务器环境搭建完成。ubuntu
2.1 DDNS系统设计
2.2 服务器流程设计
如图所示,服务器在接收到请求后,须要进行用户认证,认证经过后才能跳转至cgi程序进行数据库操做,信息获取等。
2.3 数据库设计
核心表格:
1.device记录设备对应的域名,ip地址,设备信息等
2.user记录用户信息,用户ddns权限等
3.1 Makefile编译C cgi程序
LDFLAGS := -L/usr/lib/mysql-workbench -lmysqlclient -L/usr/lib/i386-linux-gnu/ -lcrypto
INCLUDE := -I. -I/usr/include/mysql
RECO_TARGET_DIR := /var/www/cgi-bin
#全部的源文件
ALL_SRC_FILES := $(wildcard *.c)
#全部的目标文件
ALL_TARGET_OBJS := $(patsubst %.c,$(RECO_TARGET_DIR)/%.o,$(ALL_SRC_FILES))
#依赖文件
#RECO_TARGET_DIR := $(RECO_TARGET_DIR)/ddnscgi
RECO_DEPEND_FILE:= $(RECO_TARGET_DIR)/MAKEFILE.DEPEND
RECO_TARGET_NAME:=ddnstest
#避免RECO_TARGET_NAME为空时,致使误删除
ifeq ($(RECO_TARGET_NAME),)
RECO_TARGET_NAME:=oooxxxx
endif
#肯定编译目标类型
RECO_MK_EXE := $(RECO_TARGET_DIR)/$(RECO_TARGET_NAME)
RECO_MK_TARGET := $(RECO_MK_EXE)
RECO_MK_TARGET : $(RECO_MK_TARGET)
#包含依赖文件
ifneq ($(MAKECMDGOALS), clean)
include $(RECO_DEPEND_FILE)
endif
#exe生成规则
$(RECO_MK_EXE): $(ALL_TARGET_OBJS)
$(CC) -o $@ $^ $(LDFLAGS)
#.o文件生成规则
$(RECO_TARGET_DIR)/%.o:%.c
$(CC) $(INCLUDE) -o $@ -c $<
#生成依赖文件
$(RECO_DEPEND_FILE):
@set -e; \
#echo "Making $@ ..."; \
$(CC) $(INCLUDE) -E -MM $(ALL_SRC_FILES) | sed 's,\(.*\)\.o[ :]*,$(RECO_TARGET_DIR)/\1.o $@:,g'>$(RECO_DEPEND_FILE);
#执行clean操做
clean:
-rm -rf $(RECO_TARGET_DIR)/$(RECO_TARGET_NAME)
-rm -rf $(RECO_TARGET_DIR)/*.o
-rm -rf $(RECO_DEPEND_FILE)复制代码
3.2 Apache重定向实现页面跳转
首先,启用apache重写模块,并重启apache服务
方式一:
sudo a2enmod rewrite
方式二:
sudo ln -s /etc/apache2/mods-available/rewrite.load /etc/apache2/mods-enabled/rewrite.load
方式三:
修改配置文件:/usr/local/apache/conf/httpd.conf 打开LoadModule rewrite_module modules/mod_rewrite.so复制代码
其次,完成如下配置
.htaccess内容语法格式以下:
RewriteEngine On # 将 RewriteEngine 模式打开
RewriteCond String 正则表达式 //当知足是才执行rewriteRule
RewriteRule 正则表达式 目标地址
当请求地址知足正则表达式时,跳转至目标地址。复制代码
3.3 Apache Basic和digest认证的实现
在实际应用中,常要求某些页面、数据、功能只容许特定的人访问,为了实现这个目标,那么就要应用认证功能。HTTP 提供一个用于权限控制和认证的通用框架。最经常使用的是Basic认证和Digest认证。
Basic认证(基本认证):基本认证是一种用来容许Web浏览器或其余客户端程序在请求时提供用户名和口令形式的身份凭证的一种登陆验证方式。把 "用户名+冒号+密码"用BASE64算法加密后的字符串放在http request 中的header Authorization中发送给服务端,包含密码的明文传递。
Digest认证(摘要认证):摘要认证能够看作是基本认证的加强版本,不包含密码的明文传递。引入了qop、nonce、cnonce等一系列安全加强的选项,并使用 MD5 加密达成"不可逆的"。
一个典型的客户端与服务器间进行http身份认证过程:
在apache服务器实现basic认证:
采用htpasswd方式生成密码文件:
htpasswd -c /root/.htpasswd admin
在httpd.conf或default文件中进行认证配置:
<Directory "/var/www/">
AuthType basic
AuthName "Authorization "
AuthUserFile /root/.htpasswd
Require user cnsecer
</Directory>
其中“/var/www/”表明被须要认证的目录,/root/.htpasswd则指第一步生成的密码文件
复制代码
Apache实现digest认证:
1.启用digest认证模块:
a2enmod auth_digest
2.使用htdigest命令建立密码文件:
htdigest -c /usr/local/nagios/etc/nagios.users "Nagios Access" nagiosadmin
其中"Nagios Access"需与下方3.配置的AuthName 一致。
3.在httpd.conf或default文件中进行认证配置:
<Location /nagios/>
AuthType Digest
AuthName "Nagios Access"
AuthDigestDomain /nagios/ http://192.168.0.205/nagios/
AuthDigestProvider file
AuthUserFile /usr/local/nagios/etc/nagios.users密码文件路径
Require valid-user
</Location>复制代码
至此,Ubutun下DDNS服务器搭建完成。
此项目完成时间2016,有点久远,存在不足之处,欢迎小伙伴们一块儿交流。另外,想了解更多,能够访问如下连接:
Makefile规则:
Apache Rewrite规则: