apache重启时让其自动输入ssl密码

编辑:/etc/httpd/conf.d/ssl.conf

vim ssl.conf

找到:

# SSLPassPhraseDialog builtin

修改成:

SSLPassPhraseDialog exec:/etc/httpd/conf.d/key.sh

创建:key.sh

编辑:/etc/httpd/conf.d/key.sh

vim key.sh

#!/bin/bash

 echo ‘your pass phrase’                          #注意‘’号输入方式

注意key.sh的权限755

重启服务器

问题解决

关于ubuntu下安装完PHP+Apache后,无法解析php的解决方案

根据 http://blog.csdn.net/renzhenhuai/article/details/12009595

安装完之后,html文件可以正常解析,php源码直接输出,不能被解析。

通常情况下是apache未加载php模块,通常情况下需要修改httpd.conf文件,但是在ubuntu下为apache2.conf文件

修改如下:

设置

LoadModule php5_module        /usr/lib/apache2/modules/libphp5.so
AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps

/usr/lib/apache2/modules/libphp5.so换成你的路径。

如果apache2.conf中该项配置,直接加入即可。

然后重启apache即可

sudo /etc/init.d/apache2 restart

Nginx和Apache如何设置ajax跨域

关于ajax跨域的就不过多的介绍,可以参考改文章http://www.qqdeveloper.com/a/75.html

方式一:在被请求的应用程序中添加一个允许请求跨域

1.apache

1.在httpd.conf文件中加载
    LoadModule headers_module modules/mod_headers.so模块
2.在被请求文件头部添加:
header("Access-Control-Allow-Origin: *");

2.nginx

1.在被请求文件头部添加:
    header("Access-Control-Allow-Origin: *");

方式二:在配置文件中允许跨域

1.apache的配置文件httpd.conf

    Options +Indexes +FollowSymLinks +ExecCGI
    AllowOverride All
    Order allow,deny
    Allow from all
    Require all granted
    Header set Access-Control-Allow-Origin * #此行代码即是需要添加的代码2.nginx

2.在被请求的域名nginx配置文件中增加配置,配置位置和root的配置等级一致

add_header Access-Control-Allow-Origin *;
add_header Access-Control-Allow-Headers X-Requested-With;
add_header Access-Control-Allow-Methods GET,POST,OPTIONS;

该方式配置参考链接:http://www.nginx.cn/4592.html

大坑之Apache配置CGI&解决提示500错误

艾玛!这两天可把我累的够呛,心累的那种,用python写了个API想放在Apache服务器上面利用CGI使用,但是整了两个晚上,经过无数次尝试和失败,最终终于搞定了,最终豁然开朗的感觉,才觉得这特么真是非常的坑。

先简单介绍一下Apache的CGI

Apache都不知道是啥的大兄弟就自己去百度吧。。CGI你可以理解为它的一个接口,利用CGI你可以实现各种脚本的运行,只要你的服务器可以运行的脚本都可以,通过服务器运行脚本,然后将允许结果最终以HTML的形式显示给浏览器。Apache根目录如下:

  • bin:Apache服务器软件所在地
  • cgi-bi:保存自己写的CGI脚本程序
  • conf:保存服务器设置的信息
  • error:网站发送错误的处理
  • htdcocs:保存HTML程序
  • icons:保存开发Apache程序用的图标
  • include:保存开发web程序用到的一些头文件
  • lib:保存的是开发web程序用到的一些库
  • logs:日志
  • manual:Apache服务器语言的设置
  • modlules:保存一些动态链接库

一般我们常用的文件夹就是上面标红的那两个。、

开始配置:

声明一下,一般Apache的默认配置CGI都是开启的,可以在服务器的Apache的配置文件中看到配置情况,这里以Ubuntu14.4的Apache2为例看一下。
先进入apache2的主目录并查看文件夹,默认的apache2的默认目录在/etc/apache2

未分类

可以看到在这个目录下面有很多的文件夹和配置文件,Apache2其实是将各个模块的配置分文件夹保存了,这个CGI的配置文件在上图箭头指向的那个文件夹内,现在进入这个文件夹

未分类

这个serve-cgi-bin.conf文件就是我们要找的文件,使用vim编辑器打开这个文件

未分类

上图第一个箭头指向配置

ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/

这句话是用来设置别名的,就是说你在使用url访问的时候,当遇到/cgi-bin/这个目录的时候服务器会自动去/user/lib/cgi-bin/目录下面查找要访问的文件,这句话有时候可以不写,但前提是cgi的文件目录要在web的根目录下第二个箭头指向的配置

<Directory "/usr/lib/cgi-bin">
      AllowOverride None     #显示目录
      Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch    #可以运行的模块
      Require all granted   #允许所有的请求
</Directory>

注意上面标红的位置,/usr/lib/cgi-bin/要和上面的别名一致,这个地方是个可以改动的,你可以自己选定别的文件夹,当作CGI的根目录,只要设置好目录可以访问就好,然后+ExecCGI要有,这个是加载CGI模块的选项,没有是不行的。可以看到,我们并没有声明可以运行那些脚本,所以Apache会全面默认运行。只要在脚本中指定执行程序的路径即可。下面我们会讲到。好了,文件的配置完并保存之后重启服务器,然后就可以去测试一下了。

Apache2的重启命令:

sudo /etc/init.d/apache2  restart

Apche CGI 文件测试

根据上面配置的别名,我们在浏览器访问一下试试

未分类

可以看到提示的是403然后说没有权限访问这个目录而不是404,说明找到了这个文件,只不过我们没有访问脚本文件,又不允许列出目录,所以提示403,下面我们编写一个CGI脚本测试一下,这里我使用Python来测试,代码如下:

#!/usr/bin/python           #CGI运行程序的目录
# -*- coding: UTF-8 -*-

print "Content-type:text/html"
print                               # 空行,告诉服务器结束头部,CGI必须的部分
print '<html>'
print '<head>'
print '<meta charset="utf-8">'
print '<title>Hello Word - 我的第一个 CGI 程序!</title>'
print '</head>'
print '<body>'
print '<h2>Hello Word! 我是来自菜鸟教程的第一CGI程序</h2>'
print '</body>'
print '</html>'

上面的两个人注释的部分必须注意,规则不可以变。

写在python文件里面命令为t2.py,然后对文件进行权限的设置,让它具有可执行权限,注意,这一块很重要,要不然会提示500错误的

chmod  777 /usr/lib/t2.py

然后再浏览器中访问测试

未分类

仍然是500错误,其实这个才是我这篇博文的重点,这个坑我觉得肯定是坑死过很多人,这个流程明明没有问题,怎么还会出现问题呢?经过我多次的尝试,多次的失败,多次的googl,多次的baidu,就特么差放弃了,我特么成功了。我觉得我的配置没有问题,那么问题肯定出在CGI文件上面,通过测试发现,有两个地方必须要注意:

注意1

# -*- coding: UTF-8 -*-
上面这句话是用来声明utf8编码的,若文件中存有中文必须声明utf8编码格式,但是在这,这句话似乎不管用了,必须使用’

#coding:utf8
用上面的生命替换以前的代码之后,重新访问浏览器,结果仍然是500。重点在下面

注意2

在linux中新建的文件和在windows上面新建的文件是不同的,在CGI中运行的文件必须是unix文件编码格式,所以会出现500错误的!对于这个问题我测试了很久,虽然说vim编辑器有将文件编码格式转换为unix命令:set ff = unix ,但是结果还是不行,依然是500错误!但是,在linux上面使用vim新建的文件却可以正常运行。具体这个问题到底是怎么回事我也没有具体搞清楚,但是最不会出错的方法就是在linxu上面直接新建和编辑文件,或者在linux上面新建文件之后拿到本地用IDE编辑,注意!最好不要使用记事本,在测试中发现有时候记事本的BOM头也会影响程序执行。

既然知道了问题的原因,那么我们在linux上面使用vim新建文件并将代码复制过去,然后运行测试。

未分类

可以看到这样就成功了。两个晚上,闹心的,就是解决不了的问题,坑太多了,最终还好解决了,不然就要骂娘了。。!

如何在Docker容器里创建Apache Web服务

作为Linux系统管理员,或多或少都有可能听说过Docker。因为这款软件可以有效降低运营成本,提升系统部署速度,让系统管理工作变得十分轻松。

但这一切也不是变魔术,Docker只是一个容器管理平台,可以跨平台运行各种应用软件及相应工具容器的平台。换句话说,容器化的软件可以在不同系统平台直接运行而不需要任何修改,而由运行在不同系统的Docker来管理容器软件的运行。另外,同虚拟机相比,创建、停止和维护这些容器都相对容易得多,如果想仔细了解Docker同虚拟机之间的差异,可以访问Docker官方网站进行了解。

本文将实例演示如何在CentOS 7系统和Ubuntu 16.04系统安装Docker,并从Docker Hub获得 Apache 2.4容器。之后,我们还会演示如何利用Aapache容器来充当一个Web服务器,显示网页内容,而我们的主机是不需要安装任何Web服务器的。

1. CentOS 和 Ubuntu安装 Docker

安装Docker比较简单,只需要使用如下命令,无论是CentOS系统还是Ubuntu系统都可以执行。该命令实际上执行一个Docker的安装脚本,该脚本会自动将Docker软件库添加到系统,然后安装相应的软件包。

# curl -fsSL https://get.docker.com | sh

如果运行这条命令系统没有反应,也可以直接访问https://get.docker.com将脚本下载下来,然后保存成”.sh”文件在系统里执行,实在不会的话,可以 点击这里 下载安装脚本。安装完成后会看到提示建议使用”docker”用户来执行程序,测试的话不太需要,实际生产环境建议使用非root用户,增加系统安全性。

安装完成后,可以使用如下命令启动docker:

# systemctl start docker
# systemctl status docker

未分类

如果看到如图所示的内容,就表示Docker已经安装成功,并且服务已经启动。使用Docker只需要运行如下命令:

# docker

想要查看特定命令的帮助信息,则使用以下命令:

# docker COMMAND --help

例如想查看Docker的版本信息,则使用以下命令:

# docker version --help
# docker version

执行结果如下图所示:

未分类

2. 创建Apache容器

Docker生态系统最吸引人的地方在于你可以任意下载并使用数以万计的已有容器。接下来,我们将创建一个名为”Rultr-web”的Apache 2.4容器,这个容器将脱离于当前终端独立运行。为实现此功能,我们需要从Docker Hub下载一个apache 2.4的镜像文件。

假设我们将VPS的8080端口重定向到容器的80端口,另外,我们不想从容器中提供web页面,而是使用”/home/user/website”作为容器中Apache的文件目录。想要实现该功能,就需要将”/home/user/website”这个VPS实际目录映射到容器中的”/usr/local/apache2/htdocs/”目录,同时注意执行以下命令时需要具有root用户权限,需要的话适当使用sudo:

# docker run -dit --name Rultr-web -p 8080:80 -v /home/user/website/:/usr/local/apache2/htdocs/ httpd:2.4

未分类

现在,可以查看一下容器的状态,理论上Apache容器已经运行起来了:

# docker ps

未分类

接着要做的就是在系统的”/home/user/website”目录里创建页面文件,以验证容器中的Apache服务器启动成功,并且目录映射正确。

# vi /home/user/website/docker.html

简单起见,”docker.html”文件只有如下内容:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Learn Docker at rultr.com</title>
</head>
<body>
<h1>Learn Docker With Us</h1> 
</body>
</html>

然后,就可以通过浏览器访问VPS的IP地址来访问”docker.html”文件了,还记得我们是将容器的80端口映射到VPS的8080端口了么,所以,访问的地址应该形如”AAA.BBB.CCC.DDD:8080/docker.html”,成功的话就可以见到如下内容:

未分类

之后就是一些操作容器的命令,可以进行容器的停止、删除以及删除容器镜像等。

# docker stop Rultr-web          //停止容器
# docker remove Rultr-web        //删除容器
# docker image remove httpd:2.4  //删除镜像

本文只是简单介绍如何安装Docker和使用容器实例,如果想深入了解Docker的使用,则请访问官方网站学习。

Nginx与Apache环境防盗链设置方法

说明:很多人的VPS流量是有限的,而一般情况下我们放在网站上的媒体文件都是可以被别人引用的,我们的文件也就成了别人的免费外链,可想而知流量会消耗的有多快,这时候设置一下防盗链还是很有必要的。

根据我们搭建的系统环境不同,我们在Nginx和Apache中设置防盗链的方法也是不同的。

Nginx防盗链方法

location ~ .*.(gif|jpg|jpeg|png|bmp|swf|mp3|wav|zip|rar)$ {
    valid_referers none blocked xirik.cn *.xirik.cn;
    if ($invalid_referer){
        return 403;
    }
    expires 30d;
}

在网站所在的配置文件*.conf中添加以上代码,添加后重启nginx就可以生效,网址记得替换成自己的。

Apache防盗链方法

首先我们需要保证开启了Apache的伪静态模块

然后把下面代码中的网址替换成自己的,复制到网站根目录下的伪静态文件.htaccess中即可生效。

RewriteEngine On
RewriteCond %{HTTP_REFERER} !^http://xirik.cn/.*$ [NC]
RewriteCond %{HTTP_REFERER} !^http://xirik.cn$ [NC]
RewriteCond %{HTTP_REFERER} !^http://www.xirik.cn/.*$ [NC]
RewriteCond %{HTTP_REFERER} !^http://www.xirik.cn$ [NC]
RewriteRule .*.(gif|jpg|jpeg|png|bmp|swf|mp3|wav|zip|rar)$ http://xirik.cn/404.html [R,NC]

apache默认对进行了编码的url 返回 404

我们通常使用 urlencode()之类的函数将斜线编码成%开头的字符串

但是默认情况下

apache发现请求的URL中有对斜线的编码后的字符,是会返回404页面的

此时,就用到了 AllowEncodedSlashes on 指令允许请求继续被处理

如果apache配置的https,那么http和https需要分别配置。

我用的apache是 Apache/2.4.6 (CentOS)

http的配置文件和ssl配置文件是分开的。

在httpd.conf 中直接在文件中增加 AllowEncodedSlashes On

重启就生效了,而https 直接放到配置ssl.conf中是没有生效。后来查到是放到 这个标签里边。

重启后终于生效。

未分类

Apache防盗链和隐藏版本信息

实验要求:

三台虚拟机分别是:linux和两台windows虚拟机,linux虚拟机为服务器,Windows7-1为客户端,Windows7-2为盗链端。

实验步骤:

一、防盗链

1.把httpd、apr、apr-util安装包解压缩到/opt目录中

tar zxvf apr-1.4.6.tar.gz -C /opt/
tar zxvf apr-util-1.4.1.tar.gz -C /opt/
tar zxvf httpd-2.4.2.tar.gz -C /opt/

2.切换到opt目录中,把解压的文件夹递归复制到apr文件夹中

未分类

3.用yum仓库安装gcc 、gcc-c++ 、pcre 、pcre-devel、zlib-devel工具包

未分类

4.进行配置文件的配置

未分类

5.转换为二进制文件且进行安装

未分类

6.开启httpd功能且建立软连

未分类

未分类

7.在httpd的主配置文件/etc/httpd.conf 下修改监听本地主机的IP和主机名域名

未分类

未分类

8.开启httpd服务关闭防火墙和增强性安全功能

service httpd start 
service iptables stop
Setenforce 0

9.切换到/usr/local/httpd/htdocs/目录下编辑首页 文件

未分类

未分类

10.把/opt目录下的图片(game.jpg、error.png)复制到当前目录下

未分类

未分类

11.打开windows7-2盗链客户端,创建文件添加首页文件和图片且更改为扩展文件,放置于C盘inetpub wwwroot目录中。

未分类

未分类

12.构建DNS解析服务,安装bind包,编辑主配置文件/etc/named.conf修改监听地址。

未分类

未分类

13.编辑区域配置文件/etc/named.rfc1912.zones 添加域名和区域数据模块

未分类

14.复制区域数据模板到benet.com.zone进行编辑

未分类

未分类

15.启动named服务

未分类

16.在站点目录/usr/local/httpd/conf/编辑vim httpd.conf文件中开启重写模块且引用防盗链规则

未分类

未分类

17.重启httpd服务,打开Windows7-1客户机就行验证
Service httpd restart

未分类

二、隐藏版本信息

1.打开抓包工具进行测试

未分类

2.到/etc/httpd.conf中开启default.conf

未分类

3.切换到/usr/local/httpd/conf/extra/目录中,编辑httpd-default.conf文件把serverToken Full改为serverToken prod。

未分类

未分类

4.重启httpd服务,进行验证。
service httpd restart

未分类

debian9安装mariadb apache php7

一、

apt install apache2

二、

apt install php (安装后测试phpinfo)
<?php
phpinfo();
?>

三、

apt install mariadb-server

1、安装完 MariaDB 之后,运行 mysql_secure_installation 可以设置root密码及删除测试账户之类的信息。

2、新建一个用户:

insert into mysql.user(Host,User,Password) values("localhost","admin",password("admin"));

刷新系统权限表

flush privileges;

这样就创建了一个名为:admin 密码为:admin 的用户

3、创建数据库(在root权限下)

create database abc;
//授权admin用户拥有abc数据库的所有权限。

grant all privileges on abc.* to admin@localhost identified by 'admin';
//刷新系统权限表
mysql>flush privileges;

4、删除用户。

@>mysql -u root -p
@>密码
mysql>

DELETE FROM mysql.user WHERE User="admin" and Host="localhost";
mysql>flush privileges;

5、mysql>drop database abc;//删除用户的数据库

6、查看数据库中具体某个用户的权限

mysql> show grants for 'cactiuser'@'%';

7、查询所有用户:

SELECT DISTINCT CONCAT('User: ''',user,'''@''',host,''';') AS query FROM mysql.user;

8、显示所有数据库

show databases;

9、修改指定用户密码。

@>mysql -u root -p
@>密码
mysql>

update mysql.user set password=password('新密码') where User="admin" and Host="localhost";
mysql>flush privileges;

10、删除某个用户权限

revoke all privileges on wordpress.* from 'admin'@'localhost';

记Apache httpd 2.4.6 升级部署 https

一个2014年初上线的项目,要升级https,记录一下。

一共有三台WEB服务器,进入 apache/modules 查看是否有 mod_ssl.so。

两台服务器正常,一台缺失,于是需要动态编译。

官网下载httpd2.4.6(这里需要./httpd -v 查看一下当前版本号),解压缩,进入源码 /modules/ssl/ 目录

cd /usr/local/src/httpd-2.4.6/modules/ssl/

然后执行下面的动态编译命令

当前apahce的路径/bin/apxs -i -c -a -D HAVE_OPENSSL=1 -I /usr/include/openssl -lcrypto -lssl -ldl *.c

此处遇到了第一个坑:报错 /usr/bin/ld: cannot find -lcrypto

搜素一番后,是 /usr/lib64/libssl.so/usr/lib64/libcrypto.so 没有建立软连接。但是搜索出来的解决方案的路径不对,于是参考另外两台服务器

ln -s /lib64/libssl.so.0.9.8e /usr/lib64/libssl.so
ln -s /lib64/libcrypto.so.0.9.8e /usr/lib64/libcrypto.so

使用上面方式建立软链接。

然后再次编译,提示成功了。

但是在httpd restart的时候碰到了第二个坑。

再次报错:mod_ssl.so: undefined symbol: SSL_get_srp_userinfo

搜索一番了解到是 openssl 版本太高。

这才想起来,之前我更新过一次openssl,现在的版本不是 0.9.8e了。

于是 找到现在的openssl对应lib目录 /usr/local/ssl/lib/libcrypto.so.1.0.0

删除现有的链接,重新链接为新的。

rm -rf /usr/lib64/libssl.so
rm -rf usr/lib64/libcrypto.so
ln -s /usr/local/ssl/lib/libssl.so.1.0.0 /usr/lib64/libssl.so
ln -s /usr/local/ssl/lib/libcrypto.so.1.0.0 /usr/lib64/libcrypto.so

于是重新编译apahce,再次重启能够成功了。

在配置https配置文件的过程中,记得要监听443端口并且设置好防火墙规则。

Listen 0.0.0.0:443
Listen [::]:443

其他的配置文件就按照网上的参考就行了。