简体   繁体   English

如何更改默认文档根目录(www)和cgi-bin到主目录?

[英]How to change default document root (www) and cgi-bin to home directory?

I am currently trying out some CGI programming tutorials in C++ in my ubuntu 14 and I have freshly installed apache2 ( sudo apt-get install apache2 ) and it installed properly. 我目前正在ubuntu 14中尝试一些C ++中的CGI编程教程,并且我已经全新安装了apache2( sudo apt-get install apache2 )并且已正确安装。 http://localhost returned a successful responce and also default document root in var/www/html/ and cgi-bin in /usr/lib/cgi-bin/ . http://localhost返回了成功的响应,并且在var/www/html/默认了文档根目录,在/usr/lib/cgi-bin/ The problem is both directories doesn't have permission to write to it and also I don't want to work in those directories. 问题是两个目录都没有写权限,而且我也不想在这些目录中工作。 I want to change my default document root to /home/user/www/html/ and cgi-bin inside '/home/user/www/cgi-bin/' because it can be easily accessed. 我想将默认文档根目录更改为“ / home / user / www / cgi-bin /”内的/ home / user / www / /home/user/www/html/和cgi-bin,因为它可以轻松访问。

Searching returned this solution to edit this file /etc/apache2/sites-available/000-default.conf 搜索返回此解决方案以编辑此文件/etc/apache2/sites-available/000-default.conf

my current content is this 我当前的内容是这个

<VirtualHost *:80>
    # The ServerName directive sets the request scheme, hostname and port that
    # the server uses to identify itself. This is used when creating
    # redirection URLs. In the context of virtual hosts, the ServerName
    # specifies what hostname must appear in the request's Host: header to
    # match this virtual host. For the default virtual host (this file) this
    # value is not decisive as it is used as a last resort host regardless.
    # However, you must set it for any further virtual host explicitly.
    #ServerName www.example.com

    ServerAdmin webmaster@localhost
    DocumentRoot /var/www/html

    # Available loglevels: trace8, ..., trace1, debug, info, notice, warn,
    # error, crit, alert, emerg.
    # It is also possible to configure the loglevel for particular
    # modules, e.g.
    #LogLevel info ssl:warn

    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined

    # For most configuration files from conf-available/, which are
    # enabled or disabled at a global level, it is possible to
    # include a line for only one particular virtual host. For example the
    # following line enables the CGI configuration for this host only
    # after it has been globally disabled with "a2disconf".
    #Include conf-available/serve-cgi-bin.conf
</VirtualHost>

# vim: syntax=apache ts=4 sw=4 sts=4 sr noet

I changed default document root from DocumentRoot /var/www/html to DocumentRoot /home/user/www/html and changed file here also /etc/apache2/apache2.conf [user is our system username] 我将默认文档根目录从DocumentRoot /var/www/html更改为DocumentRoot /home/user/www/html并在此处将文件也更改为/etc/apache2/apache2.conf [用户是我们的系统用户名]

from

<Directory /var/www/>
    Options Indexes FollowSymLinks
    AllowOverride None
    Require all granted
</Directory>

to

<Directory /home/user/www/>
    Options Indexes FollowSymLinks
    AllowOverride None
    Require all granted
</Directory>

and restarted the server sudo service apache2 restart . 并重新启动了服务器sudo service apache2 restart I then added a small index file (index.html) to /home/user/www/html 然后,我将一个小的索引文件(index.html)添加到/home/user/www/html

<html>
<body>
hello world
</body>
</html>

But when I tried to access through html http://localhost it returned 403 forbidden error. 但是,当我尝试通过html http://localhost访问时,它返回403禁止错误。

Forbidden

You don't have permission to access / on this server.

Apache/2.4.7 (Ubuntu) Server at localhost Port 80

What is causing this error and now how should I also change cgi-bin directory? 是什么导致此错误,现在我该如何更改cgi-bin目录?

EDIT 1: also tried this method but still not working. 编辑1:也尝试了这种方法,但仍然无法正常工作。

EDIT 2: Still I cant solve my problem so I am providing here the content of /etc/apache2/apache2.conf` 编辑2:仍然无法解决我的问题,所以我在这里提供/etc/apache2/apache2.conf的内容。

# This is the main Apache server configuration file.  It contains the
# configuration directives that give the server its instructions.
# See http://httpd.apache.org/docs/2.4/ for detailed information about
# the directives and /usr/share/doc/apache2/README.Debian about Debian specific
# hints.
#
#
# Summary of how the Apache 2 configuration works in Debian:
# The Apache 2 web server configuration in Debian is quite different to
# upstream's suggested way to configure the web server. This is because Debian's
# default Apache2 installation attempts to make adding and removing modules,
# virtual hosts, and extra configuration directives as flexible as possible, in
# order to make automating the changes and administering the server as easy as
# possible.

# It is split into several files forming the configuration hierarchy outlined
# below, all located in the /etc/apache2/ directory:
#
#   /etc/apache2/
#   |-- apache2.conf
#   |   `--  ports.conf
#   |-- mods-enabled
#   |   |-- *.load
#   |   `-- *.conf
#   |-- conf-enabled
#   |   `-- *.conf
#   `-- sites-enabled
#       `-- *.conf
#
#
# * apache2.conf is the main configuration file (this file). It puts the pieces
#   together by including all remaining configuration files when starting up the
#   web server.
#
# * ports.conf is always included from the main configuration file. It is
#   supposed to determine listening ports for incoming connections which can be
#   customized anytime.
#
# * Configuration files in the mods-enabled/, conf-enabled/ and sites-enabled/
#   directories contain particular configuration snippets which manage modules,
#   global configuration fragments, or virtual host configurations,
#   respectively.
#
#   They are activated by symlinking available configuration files from their
#   respective *-available/ counterparts. These should be managed by using our
#   helpers a2enmod/a2dismod, a2ensite/a2dissite and a2enconf/a2disconf. See
#   their respective man pages for detailed information.
#
# * The binary is called apache2. Due to the use of environment variables, in
#   the default configuration, apache2 needs to be started/stopped with
#   /etc/init.d/apache2 or apache2ctl. Calling /usr/bin/apache2 directly will not
#   work with the default configuration.


# Global configuration
#

#
# ServerRoot: The top of the directory tree under which the server's
# configuration, error, and log files are kept.
#
# NOTE!  If you intend to place this on an NFS (or otherwise network)
# mounted filesystem then please read the Mutex documentation (available
# at <URL:http://httpd.apache.org/docs/2.4/mod/core.html#mutex>);
# you will save yourself a lot of trouble.
#
# Do NOT add a slash at the end of the directory path.
#
#ServerRoot "/etc/apache2"

#
# The accept serialization lock file MUST BE STORED ON A LOCAL DISK.
#
Mutex file:${APACHE_LOCK_DIR} default

#
# PidFile: The file in which the server should record its process
# identification number when it starts.
# This needs to be set in /etc/apache2/envvars
#
PidFile ${APACHE_PID_FILE}

#
# Timeout: The number of seconds before receives and sends time out.
#
Timeout 300

#
# KeepAlive: Whether or not to allow persistent connections (more than
# one request per connection). Set to "Off" to deactivate.
#
KeepAlive On

#
# MaxKeepAliveRequests: The maximum number of requests to allow
# during a persistent connection. Set to 0 to allow an unlimited amount.
# We recommend you leave this number high, for maximum performance.
#
MaxKeepAliveRequests 100

#
# KeepAliveTimeout: Number of seconds to wait for the next request from the
# same client on the same connection.
#
KeepAliveTimeout 5


# These need to be set in /etc/apache2/envvars
User ${APACHE_RUN_USER}
Group ${APACHE_RUN_GROUP}

#
# HostnameLookups: Log the names of clients or just their IP addresses
# e.g., www.apache.org (on) or 204.62.129.132 (off).
# The default is off because it'd be overall better for the net if people
# had to knowingly turn this feature on, since enabling it means that
# each client request will result in AT LEAST one lookup request to the
# nameserver.
#
HostnameLookups Off

# ErrorLog: The location of the error log file.
# If you do not specify an ErrorLog directive within a <VirtualHost>
# container, error messages relating to that virtual host will be
# logged here.  If you *do* define an error logfile for a <VirtualHost>
# container, that host's errors will be logged there and not here.
#
ErrorLog ${APACHE_LOG_DIR}/error.log

#
# LogLevel: Control the severity of messages logged to the error_log.
# Available values: trace8, ..., trace1, debug, info, notice, warn,
# error, crit, alert, emerg.
# It is also possible to configure the log level for particular modules, e.g.
# "LogLevel info ssl:warn"
#
LogLevel warn

# Include module configuration:
IncludeOptional mods-enabled/*.load
IncludeOptional mods-enabled/*.conf

# Include list of ports to listen on
Include ports.conf


# Sets the default security model of the Apache2 HTTPD server. It does
# not allow access to the root filesystem outside of /usr/share and /var/www.
# The former is used by web applications packaged in Debian,
# the latter may be used for local directories served by the web server. If
# your system is serving content from a sub-directory in /srv you must allow
# access here, or in any related virtual host.
<Directory />
    Options FollowSymLinks
    AllowOverride None
    Require all denied
</Directory>



<Directory /usr/share>
    AllowOverride None
    Require all granted
</Directory>

<Directory /home/user/www/html>
    Options Indexes FollowSymLinks
    AllowOverride None
        #AllowOverride All
    Require all granted
</Directory>

#<Directory /srv/>
#   Options Indexes FollowSymLinks
#   AllowOverride None
#   Require all granted
#</Directory>




# AccessFileName: The name of the file to look for in each directory
# for additional configuration directives.  See also the AllowOverride
# directive.
#
AccessFileName .htaccess

#
# The following lines prevent .htaccess and .htpasswd files from being
# viewed by Web clients.
#
<FilesMatch "^\.ht">
    Require all denied
</FilesMatch>


#
# The following directives define some format nicknames for use with
# a CustomLog directive.
#
# These deviate from the Common Log Format definitions in that they use %O
# (the actual bytes sent including headers) instead of %b (the size of the
# requested file), because the latter makes it impossible to detect partial
# requests.
#
# Note that the use of %{X-Forwarded-For}i instead of %h is not recommended.
# Use mod_remoteip instead.
#
LogFormat "%v:%p %h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" vhost_combined
LogFormat "%h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%h %l %u %t \"%r\" %>s %O" common
LogFormat "%{Referer}i -> %U" referer
LogFormat "%{User-agent}i" agent

# Include of directories ignores editors' and dpkg's backup files,
# see README.Debian for details.

# Include generic snippets of statements
IncludeOptional conf-enabled/*.conf

# Include the virtual host configurations:
IncludeOptional sites-enabled/*.conf

# vim: syntax=apache ts=4 sw=4 sts=4 sr noet

EDIT 3: This is the error log of apache2 编辑3:这是apache2的错误日志

[core:error] [pid 16536:tid 139636399695616] (13)Permission denied: [client 127.0.0.1:46221] AH00035: access to / denied (filesystem path '/home/user/www') because search permissions are missing on a component of the path [core:error] [pid 16536:tid 139636399695616](13)权限被拒绝:[client 127.0.0.1:46221] AH00035:访问/拒绝(文件系统路径'/ home / user / www'),因为缺少搜索权限路径的组成部分

So I tried to change the permission of my directory and files using chmod +x,644,755 etc. 因此,我尝试使用chmod + x,644,755等更改目录和文件的权限。

result of namei -m /home/user/www/html/index.html namei -m /home/user/www/html/index.html结果

 drwxr-xr-x /
 drwxr-xr-x home
 drwx------ user
 drwxr-xr-x www
 drwxr-xr-x html

I am using Linux Mint 17.1 which is a Ubuntu derivative. 我正在使用Linux Mint 17.1,它是Ubuntu的衍生产品。 I have Apache2 installed by default. 我默认安装了Apache2。 In my /etc/apache2 directory I have apache2.conf with the following directive: 在我的/ etc / apache2目录中,我有带有以下指令的apache2.conf:

# Include module configuration:
IncludeOptional mods-enabled/*.load
IncludeOptional mods-enabled/*.conf

All this does is tell Apache2 to "include" the configuration directives found in the various files under the /etc/apache2/mods-enabled directory. 所有这些都是告诉Apache2“包括”在/etc/apache2/mods-enabled目录下的各种文件中找到的配置指令。 When I look in the mods-enabled directory, I find a bunch of symlinks to files in the /etc/apache2/mods-available/ directory. 当我查看mods-enabledmods-enabled目录时,在/etc/apache2/mods-available/目录中找到了一堆符号链接。 For each module Apache2 has been told to load, there are two symlinks: [module].conf and [module].load . 对于已告知Apache2加载的每个模块,有两个符号链接: [module].conf[module].load

What you need is to enable the userdir module. 您需要启用userdir模块。 On my machine I was able to do this simply by creating a symlink in the mods-enabled directory to /etc/apache2/mods-available/userdir.conf and userdir.load , then restarting the server. 在我的机器上,只需在mods-enabled目录中创建到/etc/apache2/mods-available/userdir.confuserdir.load的符号链接,然后重新启动服务器,即可完成此操作。 After that I was able to put a basic index.html in /home/user/public_html/ and surf to http://localhost/~user/ to see it in action. 之后,我可以将基本的index.html放在/ home / user / public_html /中,然后浏览到http:// localhost /〜user /以查看其运行情况。

If your apache2 isn't configured using modules loaded in separate directories this way, you can also try adding the userdir directives directly into apache2.conf . 如果未使用通过这种方式在单独目录中加载的模块来配置apache2,则还可以尝试将userdir指令直接添加到apache2.conf This is what they contain on my machine: 这是我的机器上包含的内容:

<IfModule mod_userdir.c>
    UserDir public_html
    UserDir disabled root

    <Directory /home/*/public_html>
        AllowOverride FileInfo AuthConfig Limit Indexes
        Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec
        <Limit GET POST OPTIONS>
            Require all granted
        </Limit>
        <LimitExcept GET POST OPTIONS>
            Require all denied
        </LimitExcept>
    </Directory>
</IfModule>

There are some security concerns with this configuration you should be aware of, so I would strongly encourage looking over the userdir documentation here: http://httpd.apache.org/docs/2.4/howto/public_html.html 您应该注意此配置存在一些安全问题,因此,我强烈建议您在此处查看userdir文档: http : //httpd.apache.org/docs/2.4/howto/public_html.html

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM