Options指令详解

2019-08-03 01:51 来源:未知

None
表示不启用任何的服务器特性。

三、附文


    # The Options directive is both complicated and important.  Please see

备注1:混合使用前面带" "/"-"和前面不带" "/"-"的同一可选项,可能会导致出现意料之外的结果。

Nginx配置PHP(请先自行安装PHP):

  • 配置php-fpm:
    运行 vi /etc/php-fpm.d/www.conf
; Unix user/group of processes
; Note: The user is mandatory. If the group is not set, the default user's group
;       will be used.
; RPM: apache Choosed to be able to access some dir as httpd
user = nginx                //配置php-fpm运行账户为nginx
; RPM: Keep a group allowed to write in log dir.
group = nginx               //配置php-fpm账户组为nginx

设置php自启动: chkconfig php-fpm on
设置nginx自启动: chkconfig php-fpm on
重新启动nginx: service nginx restart
启动php-fpm: php-fpm service php-fpm start

Nginx虚拟主机PHP配置模板:

server
{
    listen 80;
    #listen [::]:80;
    server_name aaa.com www.aaa.com;
    index index.html index.htm index.php default.html default.htm default.php;
    root /www/test.com;
    #error_page 404 /404.html;

    location ~ [^/].php(/|$) {
    # comment try_files $uri =404; to enable pathinfo
    try_files $uri =404;

    #php
    fastcgi_pass 127.0.0.1:9000;
    fastcgi_index index.php;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    #目录隔离
    fastcgi_param PHP_ADMIN_VALUE "open_basedir=/wwwroot/aaa/:/tmp/:/proc/";
    include fastcgi_params;
    #include pathinfo.conf;
    }

    location ~ .*.(gif|jpg|jpeg|png|bmp|swf)$ {
    expires 30d;
    }

    location ~ .*.(js|css)?$ {
    expires 12h;
    }
    access_log /wwwroot/wwwlogs/aaa.log main;
}

附:PHP—FPM运行账户配置:
配置文件/etc/php-fpm.d/www.conf

Unix user/group of processes
; Note: The user is mandatory. If the group is not set, the default user's group
;       will be used.
; RPM: apache Choosed to be able to access some dir as httpd
user = www
; RPM: Keep a group allowed to write in log dir.
group = www

    # It can be "All", "None", or any combination of the keywords:

Options指令是Apache配置文件中一个比较常见也比较重要的指令,Options指令可以在Apache服务器核心配置(server config)、虚拟主机配置(virtual host)、特定目录配置(directory)以及.htaccess文件中使用。Options指令的主要作用是控制特定目录将启用哪些服务器特性。

二、Nginx部分配置

Nginx配置文件路径:/etc/nginx/nginx.conf
Nginx默认站点配置文件:/etc/nginx/conf.d/default.conf
Nginx默认虚拟主机配置文件:/etc/nginx/conf.d/virtual.conf

配置Nginx运行账户及文件上传(nginx.conf):

#用户名 用户组
user www www;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /var/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" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    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;

    #nginx文件上传大小
    client_max_body_size 50m;
    #nginx文件缓存目录
    client_body_temp_path /tmp/nginx_temp;

    # 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;
}

Nginx虚拟主机简单配置模板:

server {
    listen 80;                                      //监听端口
    server_name test.com;                           //绑定域名

    location / { 
    root /www/test.com/;                            //站点根目录
    index index.html index.htm index.php;           //默认首页文件
    } 
}

server_name可同时指定多个,如:server_name test.com www.test.com *.test.com;

    AddOutputFilter INCLUDES .shtml //添加include

图片 1

    # Note that "MultiViews" must be named *explicitly* — "Options All"

Options指令的完整语法为:Options [ |-]option [[ |-]option] ...。简而言之,Options指令后可以附加指定多种服务器特性,特性选项之间以空格分隔。下面我们来看看Options指令后可以附加的特性选项的具体作用及含义(Apache配置中的内容均不区分大小写):

APACHE&NGINX

熟悉apache manual的可能会觉得比较容易。

ExecCGI
允许使用mod_cgi模块执行CGI脚本。

一、Apache部分配置

Apache配置文件路径:/etc/httpd/conf/httpd.conf
Apache默认虚拟主机配置文件(WIN):/etc/httpd/conf/extra/httpd-vhosts.conf
Apache指定运行账户:
在Apache配置文件 httpd.conf 中设置User和Group。

#
# If you wish httpd to run as a different user or group, you must run
# httpd as root initially and it will switch.
#
# User/Group: The name (or #number) of the user/group to run httpd as.
# It is usually good practice to create a dedicated user and group for
# running httpd, as with most system services.
#
User www            //运行账户
Group www           //账户所属组

Apache虚拟主机配置模板:

NameVirtualHost *:80                            //httpd.conf中配置或包含在站点配置文件中

<VirtualHost *:80>                              //站点域名/主机:端口
    <Directory "D:/vhosts/www.test.com">        //站点根目录
        Options -Indexes FollowSymLinks         //设置选项,详情见附文1
    </Directory>
    ServerAdmin admin@www.test.com              //管理员邮箱
    DocumentRoot "D:/vhosts/www.test.com"       //站点根目录
    ServerName www.test.com                     //绑定域名
    ServerAlias test12355.com www123.com        //站点别名
    ErrorLog logs/www.test.com-error_log        //错误日志
  # php_admin_value open_basedir "/www/www.test.com;/tmp;"      //目录隔离,详情见附文2
</VirtualHost>

如何使你的Apache服务器支持SSI?

备注2:使用-IncludesNOEXEC-Includes时,不论前面如何设置,都会完全禁用服务器端包含。

附文2:open_basedir限制目录详解

  1. open_basedir介绍
    前言:前些日我用lnmp一键安装包出现了open_basedir的问题,因为我把项目目录变了,所以要在的fastcgi.conf下面加上open_basedir的目录
    open_basedir 将PHP所能打开的文件限制在指定的目录树中,包括文件本身。当程序要使用例如fopen()或file_get_contents()打开一个文件时,这个文件的位置将会被检查。当文件在指定的目录树之外,程序将拒绝打开。
    本指令不受安全模式打开或关闭的影响。
  1. open_basedir设置方法

    • 在php.ini 加入 open_basedir="指定目录"

    • 在程序中使用 ini_set('open_basedir', '指定目录');
      但不建议使用这种方法

    • 在apache的httpd.conf中的Directory配置:
      php_admin_value open_basedir "指定目录"
      httpd.conf中的VritualHost:
      php_admin_value open_basedir "指定目录"

    • nginx fastcgi.conf配置
      fastcgi_param PHP_VALUE "open_basedir=指定目录"

    • 说明:用open_basedir指定的限制实际上是前缀,不是目录名。
      也就是说 open_basedir=/home/fdipzone 也会允许访问/home/fdipzone_abc
      如果要将访问限制为目录,请使用斜线结束路径名:
      例如:open_basedir=”/home/fdipzone/”
      如果要设置多个目录,window使用;分隔目录,Linux使用:分隔目录。

  1. 使用open_basedir限制目录访问
    首先创建一个VirtualHost,
    设置open_basedir 为 /home/fdipzone/sites/in.fdipzone.com/
<VirtualHost *:80>
    ServerAdmin webmaster@localhost
    DocumentRoot /home/fdipzone/sites/in.fdipzone.com
    ServerName in.fdipzone.com
    php_admin_value open_basedir "/home/fdipzone/sites/in.fdipzone.com/"
    <Directory "/home/fdipzone/sites/in.fdipzone.com">
        allow from all Options   Indexes
    </Directory>
</VirtualHost>

在上一层目录 /home/fdipzone/sites/ 中创建一个test.txt文件,在in.fdipzone.com中创建php执行以下代码:

<?php
echo file_get_contents('../test.txt');
?>

因为test.txt不在限定的目录范围内,因此php提示警告:

Warning: file_get_contents(): open_basedir restriction in effect. File(../test.txt) is not within the allowed path(s): (/home/fdipzone/sites/in.fdipzone.com/) in /home/fdipzone/sites/in.fdipzone.com/index.php on line 3

  1. 设置open_basedir的性能分析
    open_basedir开启后会影响I/O,因为每个调用的文件都需要判断是否在限制目录内。
    测试程序,读取限制目录内同一文件10000次
<?php
// 记录开始时间
$starttime = getMicrotime();

// 读取10000次文件
for($i=0; $i<10000; $i  ){
    file_get_contents('test.txt');
}

// 记录结束时间
$endtime = getMicrotime();

printf("run time %f msrn", ((float)($endtime)-(float)($starttime))*1000);

function getMicrotime(){
    list($usec, $sec) = explode(' ', microtime());
    return (float)$usec   (float)$sec;
}
?>

关闭open_basedir测试:run time 137.237072 ms
打开open_basedir测试:run time 404.207945 ms
开启open_basedir后,执行时间是关闭的3倍。

总结:使用open_basedir可以限制程序可操作的目录和文件,提高系统安全性。但会影响I/O性能导致系统执行变慢,因此需要根据具体需求,在安全与性能上做平衡。


    #

图片 2

注:本文环境均为CentOS6。

    #

  1. <Directory/>
  2. #指定根目录"/"启用Indexes、FollowSymLinks两种特性。
  3.     Options Indexes FollowSymLinks
  4.     AllowOverride all
  5.     Order allow,deny
  6.     Allow from all
  7. </Directory>

附文1:Apache Options指令详解

Options指令是Apache配置文件中一个比较常见也比较重要的指令,Options指令可以在Apache服务器核心配置(server config)、虚拟主机配置(virtualhost)、特定目录配置(directory)以及.htaccess文件中使用。Options指令的主要作用是控制特定目录将启用哪些服务器特性。

  • Options指令常见的配置示例代码如下:
<Directory />
    #指定根目录"/"启用Indexes、FollowSymLinks两种特性
    Options Indexes FollowSymLinks
    AllowOverride all
    Order allow,deny
    Allow from all
</Directory>

Options指令的完整语法为:Options [ |-]option [[ |-]option]...
简而言之,Options指令后可以附加指定多种服务器特性,特性选项之间以空格分隔。

下面我们来看看Options指令后可以附加的特性选项的具体作用及含义(Apache配置中的内容均不区分大小写):

  • All
    表示除MultiViews之外的所有特性。这也是Options指令的默认设置。

  • None
    表示不启用任何的服务器特性。

  • FollowSymLinks
    服务器允许在此目录中使用符号连接。如果该配置选项位于<Location>配置段中,将会被忽略。

  • Indexes
    如果输入的网址对应服务器上的一个文件目录,而此目录中又没有DirectoryIndex指令(例如:DirectoryIndex index.html index.php),那么服务器会返回由mod_autoindex模块生成的一个格式化后的目录列表,并列出该目录下的所有文件(如下图)。

    图片 3

    image

  • MultiViews
    允许使用mod_negotiation模块提供内容协商的"多重视图"。简而言之,如果客户端请求的路径可能对应多种类型的文件,那么服务器将根据客户端请求的具体情况自动选择一个最匹配客户端要求的文件。例如,在服务器站点的file文件夹下中存在名为hello.jpg和hello.html的两个文件,此时用户输入Http://localhost/file/hello,如果在file文件夹下并没有hello子目录,那么服务器将会尝试在file文件夹下查找形如hello.*的文件,然后根据用户请求的具体情况返回最匹配要求的hello.jpg或者hello.html。

  • SymLinksIfOwnerMatch
    服务器仅在符号连接与目标文件或目录的所有者具有相同的用户ID时才使用它。简而言之,只有当符号连接和符号连接指向的目标文件或目录的所有者是同一用户时,才会使用符号连接。如果该配置选项位于<Location>配置段中,将会被忽略。

  • ExecCGI
    允许使用mod_cgi模块执行CGI脚本。

  • Includes
    允许使用mod_include模块提供的服务器端包含功能。

  • IncludesNOEXEC
    允许服务器端包含,但禁用"#exec cmd"和"#exec cgi"。但仍可以从ScriptAlias目录使用"#include virtual"虚拟CGI脚本。

此外,比较细心的读者应该注意到,Options指令语法允许在配置选项前加上符号" "或者"-",那么这到底是什么意思呢?
实际上,Apache允许在一个目录配置中设置多个Options指令。不过,一般来说,如果一个目录被多次设置了Options,则指定特性数量最多的一个Options指令会被完全接受(其它的被忽略),而各个Options指令之间并不会合并。但是如果我们在可选配置项前加上了符号" "或"-",那么表示该可选项将会被合并。所有前面加有" "号的可选项将强制覆盖当前的可选项设置,而所有前面有"-"号的可选项将强制从当前可选项设置中去除。你可以参考下面的例子:

  • 示例1:
<Directory /web/file>
Options Indexes FollowSymLinks
</Directory>

<Directory /web/file/image>
Options Includes
</Directory>

#目录/web/file/image只会被设置Includes特性
  • 示例2:
<Directory /web/file>
Options Indexes FollowSymLinks
</Directory>

<Directory /web/file/image>
Options  Includes -Indexes
</Directory>

#目录/web/file/image将会被设置Includes、FollowSymLinks两种特性 

备注1:混合使用前面带" "/"-"和前面不带" "/"-"的同一可选项,可能会导致出现意料之外的结果。
备注2:使用-IncludesNOEXEC或-Includes时,不论前面如何设置,都会完全禁用服务器端包含。

    Options None

Indexes
如果输入的网址对应服务器上的一个文件目录,而此目录中又没有DirectoryIndex指令(例如:DirectoryIndex index.html index.php),那么服务器会返回由mod_autoindex模块生成的一个格式化后的目录列表,并列出该目录下的所有文件(如下图)。

总结如下:

Options指令常见的配置示例代码如下:

    # for more information.

Includes
允许使用mod_include模块提供的服务器端包含功能。

 

此外,比较细心的读者应该注意到,Options指令语法允许在配置选项前加上符号" "或者"-",那么这到底是什么意思呢。

  1. 确认加载include.so模块,将注释去掉: 
    LoadModule include_module libexec/apache2/mod_include.so 

FollowSymLinks
服务器允许在此目录中使用符号连接。如果该配置选项位于<Location>配置段中,将会被忽略。

<!--#include virtual="inc/head.shtml"-->
<!--#include virtual="inc/footer.shtml"-->

  1. #示例2
  2. <Directory/web/file>
  3. OptionsIndexesFollowSymLinks
  4. </Directory>
    1. <Directory /web/file/image>
  5. Options Includes-Indexes
  6. </Directory>
  7. #目录/web/file/image将会被设置Includes、FollowSymLinks两种特性

    AllowOverride None

SymLinksIfOwnerMatch
服务器仅在符号连接与目标文件或目录的所有者具有相同的用户ID时才使用它。简而言之,只有当符号连接和符号连接指向的目标文件或目录的所有者是同一用户时,才会使用符号连接。如果该配置选项位于<Location>配置段中,将会被忽略。

httpd.exe -t

本文永久更新链接地址:http://www.linuxidc.com/Linux/2017-01/139464.htm

<IfModule dir_module>

图片 4

修改SSI 文件

  1. #示例1
  2. <Directory/web/file>
  3. OptionsIndexesFollowSymLinks
  4. </Directory>
    1. <Directory /web/file/image>
  5. OptionsIncludes
  6. </Directory>
  7. #目录/web/file/image只会被设置Includes特性
  1. Directory目录权限里面找到 
    Options Indexes FollowSymLinks 
    增加Includes修改为: 
    Options Indexes FollowSymLinks Includes 

IncludesNOEXEC
允许服务器端包含,但禁用"#exec cmd"和"#exec cgi"。但仍可以从ScriptAlias目录使用"#include virtual"虚拟CGI脚本。

 

All
表示除MultiViews之外的所有特性。这也是Options指令的默认设置

cmd命令检查配置文件:

实际上,Apache允许在一个目录配置中设置多个Options指令。不过,一般来说,如果一个目录被多次设置了Options,则指定特性数量最多的一个Options指令会被完全接受(其它的被忽略),而各个Options指令之间并不会合并。但是如果我们在可选配置项前加上了符号" "或"-",那么表示该可选项将会被合并。所有前面加有" "号的可选项将强制覆盖当前的可选项设置,而所有前面有"-"号的可选项将强制从当前可选项设置中去除。你可以参考下面的例子:

 

MultiViews
允许使用mod_negotiation模块提供内容协商的"多重视图"。简而言之,如果客户端请求的路径可能对应多种类型的文件,那么服务器将根据客户端请求的具体情况自动选择一个最匹配客户端要求的文件。例如,在服务器站点的file文件夹下中存在名为hello.jpghello.html的两个文件,此时用户输入Http://localhost/file/hello,如果在file文件夹下并没有hello子目录,那么服务器将会尝试在file文件夹下查找形如hello.*的文件,然后根据用户请求的具体情况返回最匹配要求的hello.jpg或者hello.html

如果用户不能直接访问服务器配置文件,可以使用文件编辑器创建一个名为.htaccess的文件。注意,文件名前一定要有符号“.”,这样服务器才能知道该文件是隐藏文件,从而提高文件的安全性,避免错误操作。在.htaccess文件中需要加入以下三行文字:
Options Indexes FollowSymLinks Includes 
AddType application/x-httpd-CGI .CGI 
AddType text/x-server-parsed-html .shtml
完成之后可以把.htaccess文件上传到服务端的相应目录,该文件对所有子目录有效。如果用户希望在目录级上禁止CGI或shell命令,可以在.htaccess文件中的Options选项行加入关键字IncludesNOEXEC

到此我们就完成了对Apache SSI的设置。

即将该行改变为 Options Indexes FollowSymLinks Includes

  1. AddType部分去掉这两段注释: 
    AddType text/html .shtml 
    AddOutputFilter INCLUDES .shtml 

</Directory>

方法2–.创建文件.htaccess

    Allow from all

    # doesn't give it to you.

在搜索到的那一行后面添加“ Includes”

方法1–apache配置:

    AllowOverride None

    #   Options FileInfo AuthConfig Limit

</Directory>

    # or any combination of:

在页面中引入shtml代码:

    #

如果需要使用html解析包含,  

<Directory "D:/Android/Apache2.2/htdocs">  //修改文件目录

详解:

    Allow from all

<Directory "D:/htdocs/test">  //修改文件目录

    Order allow,deny

添加 AddOutputFilter INCLUDES .html 到下面即可

</IfModule>

    # Possible values for the Options directive are "None", "All",

    Options Indexes FollowSymLinks Includes //添加include

    #

    # AllowOverride controls what directives may be placed in .htaccess files.

    #

保存httpd.conf,重起apache即可

Apache(如何在windows以及linuc下安装apache请参见另两篇文章)默认是不支持SSI的,需要我们更改httpd.conf来进行配置。我这里以windows平台的Apache 2.0.x为例(在linux平台下与之相同),打开conf目录下的httpd.conf文件,搜索“AddType text/html .shtml”,找到:

    #

    #

    #

    AddType text/html .shtml  

把这两行前面的#去掉 。

    Order allow,deny

AddType application/x-httpd-CGI .CGI 
AddType text/x-server-parsed-html .shtml在 它后面添加

   DirectoryIndex index.html index.shtml  //这个是添加默认的索引文件

 

    #

    # Controls who can get stuff from this server.

以下是引用片段:
# AddType text/html .shtml 
# AddOutputFilter INCLUDES .shtml

然后搜索“Options Indexes FollowSymLinks”

  1. 重新启动Apache,测试: 
    <!–#include file=”head.html”–> 
    Holle Word!,这是中间的内容 
    <!–#include file=”foot.html”–>

conf–httpd.conf

    #   Indexes Includes FollowSymLinks SymLinksifOwnerMatch ExecCGI MultiViews

TAG标签: 韦德娱乐1946
版权声明:本文由韦德娱乐1946_韦德娱乐1946网页版|韦德国际1946官网发布于韦德国际1946官网,转载请注明出处:Options指令详解