Articles of apache 2.4

nginx反向代理apache url静默重写和https重写

我有一个nginx + Apacheconfiguration运行。 我对nginx非常新,我有相当长的时间来学习它。 首先我想做一个基本的重写。 根据我的理解,当nginx被用作反向代理时,来自apache的.htaccess仍然可以工作。 可悲的是 – 我的理解不完全正确 – 有些部分是有效的,有些则不是。 所以我试图用.htaccess做一个基本的重写 RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^/?index.* /fp/ [P] 我发现在.htaccess中使用[P]标志而不是正常的重写 – 会导致无法find/index.html的错误(在整个站点上没有任何index.html如此清晰它不能被发现)。 我也尝试过使用[L]标志,而不是像我期望的那样默默转发,而是做了一个redirect,所以用户可以在地址栏中看到/ fp /而不是我正在寻找的结果。 所以 – 我把redirect移到了nginxconfiguration。 这似乎工作正常。 我做的nginxredirect是非常基本的使用if语句 if ($uri = '/'){ rewrite / /fp/ break; } 这个redirect只会redirect/不在/index.php或其他任何文件上。 接下来我有一个名为/login.php的文件。 我想转发用户到https://如果通过http://访问 所以我试图用$_SERVER['REQUEST_SCHEME'];做一个apachescheme检查$_SERVER['REQUEST_SCHEME']; 问题是 – 这是返回http是否其https://或http:// login.php在/ 所以对于初学者来说,我怎么才能让httpredirect到https只在login.php页面上。 我也应该注意到我试图做一个从httpredirect到https使用.htaccess,但作为服务器返回http和从来没有https导致无限循环。 除此之外,为什么apache的.htaccess [P]标志导致searchindex.html,并且为什么silectredirect突然公开? 如果我需要显示我的configuration […]

LocationMatch正则expression式可以匹配查询string部分吗?

我正在尝试使用LocationMatch正则expression式来尝试匹配某个file upload或通过应用程序下载时。 该应用程序在URL中使用查询string。 请求: “POST /uploads.js?attachment_id=2&filename=issues%20(12).csv&content_type=application%2Fvnd.ms-excel HTTP / 1.1”200 336 我注意到,正则expression式似乎无法看到“?”后面的查询string。 在URL中。 那是对的吗? 为什么? 有没有办法能够正则expression式在查询string部分匹配什么?

设置apache允许来自1个IPv6地址的stream量

我试图设置一个Apache只允许用户从一个特定的IP地址。 这是/var/www/html目录的指令 <Directory "/var/www/html"> Options Indexes FollowSymLinks AllowOverride None Options -Indexes <RequireAll> Require ip 2b00:ff2:600:8200::/64 </RequireAll> </Directory> 不幸的是,它阻止了我的IPstream量。 我看到默认的apache网站,虽然我已经设置了一个index.html文件。 任何想法什么是正确的指令,以允许从1 ipv6stream量? 我使用的是Apache 2.4.6

如何处理指向不同域名的CNAME的SSL证书

我的目标是: *a.example1.com* should point to *example2.com/test* 数据 : example2.com的托pipe机器具有SSL证书(通配符)* .example2.com 我pipe理这两个域。 我想到的解决scheme: 创build一个指向“/ var / www / site / test”下的内容的子域test.example2.com 。 (子域应该指向同一台机器) 创buildCNAMElogging,如: a.example1.com CNAME test.example2.com 问题: 这将导致浏览器上的SSL证书问题。 因此,我需要在example2.com的主机上安装a.example1.com的SSL证书,更确切地说,在虚拟主机test.example2.com上安装SSL证书。 但是,我不确定这甚至是可能的吗? 我发现这个来源如何有两个虚拟主机在Apache与两个不同的域,因此具有不同的SSL证书:所以,如果我做到以下几点: 为test.example2.com创build一个虚拟主机 – >指向“/ var / www / site / news”,并使用通配符证书“* .example2.com” 为a.example1.com创build另一个虚拟主机—>指向/ var / www / site / test并使用通配符证书“a.example1.com”(在同一台机器上) 并创build了以下logging: a.example1.com CNAME到test.example2.com 这能解决我的问题吗?

获取https转发到AWS TCP负载均衡器后面的X-Towarded

我在自动调节池上有一个AWS TCP负载平衡器,后面有多个域,所以我不能在负载平衡器上进行SSL终止,因此TCP也是如此。 我已经更新了我的日志logging格式来loggingX-Forwarded-For,这对于HTTP而言并不适用于HTTPS。 论坛并没有表明,这是不可能的,因为它谈论HTTP(S),但我不能得到它的工作。 它可以工作吗? 这是我的日志logging细节: LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined LogFormat "%{X-Forwarded-For}i %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" proxy SetEnvIf X-Forwarded-For "^.*\..*\..*\..*" forwarded LogFormat "%h %l %u %t \"%r\" %>s %b" common CustomLog "logs/access_log" combined env=!forwarded CustomLog "logs/access_log" proxy env=forwarded 在PHP中转储所有属性我可以看到HTTP请求头,但不是HTTPS,所以我不认为这是一个configuration问题。

如何使用apache2 / sites-available / example.com.conf而不是000-default.conf?

nginx被configuration为apache(2.4.18)的反向代理和多个域的节点。 /etc/nginx/sites-available/example.com : server { listen 80; server_name example.com; # /api is running on php/apache location /api { proxy_pass http://localhost:8080/api; proxy_set_header Host $host; } # all the rest is handled by node.js location / { proxy_pass http://localhost:3000; proxy_set_header Host $host; } } /etc/apache2/sites-available/example.com : <VirtualHost *:8080> ServerName example.com DocumentRoot /var/www/example.com/api </VirtualHost> /etc/apache2/sites-available/000-default.conf : <VirtualHost *:8080> […]

login保护根,但允许所有在subdir? (Apache)的

我目前有一个设置,其中根login(密码)保护,但我需要打开一个特定的子目录给公众。 我似乎无法完成这一点,无论我尝试哪些组合的命令。 目前,我的设置( /etc/apache2/sites-available/000-default.conf )是: # access settings <Location /> AuthType Basic AuthName "Password Protected Area" AuthUserFile /var/www/.htpasswd Require valid-user </Location> <Location /var/www/html/some_dir> AllowOverride All Require all granted Satisfy Any Allow from all </Location> 注意:每次更改后,我都重新启动了apache。 版本: Ubuntu 14.04.3 LTS Apache 2.4.7

Apache 2.4上的mod_security:我可以禁用特定请求元素的所有规则吗?

我有一个由Apache服务的应用程序,在这个应用程序上启用了mod_security,并且我已经成功地调整了exception,以避免错误的使用类似于: SecRuleUpdateTargetById 981260 !ARGS:'/^PD-.*/' 但是现在我正面临着请求参数带有密码的情况,该密码可能包含mod_security将标记为误报的所有可能的字符组合。 所以我天真的解决scheme将是禁用所有规则的特定论点,像这样的: SecRuleUpdateTargetById * !ARGS:'/^PD-.*/' 这样的事情可能吗?

代理(或redirect?)每个位置的请求

像这样的东西可以在mod_proxy中全局运行: ProxyPass /api/* http://localhost:8081/api ProxyPassReverse /api/* http://localhost:8081/api 所以我所有的/api客户端请求都被定向到http://localhost:8081/api 如果我有两个位置,如localhost/site1/ localhost/site2/ ,我需要不同的redirect每个站点?所有这些应用程序请求/ apiasynchronous 所以访问site1,xhr调用请求/ api,我想要http:// localhost:8081 / api来响应 for / site2一个xhr调用请求/ api,我想要http:// localhost:9091 / api来响应 这可以通过在每个文件夹中的.htaccess来完成,或者通过全局redirect来完成吗?我需要mod_rewrite和http Referrer规则或mod_proxy这个吗? 谢谢

使用Mod_redirect QUERY_STRING来阻止URLS

我正在尝试编写重写规则来阻止某些特定模式的URL。 请求如下所示,如Apache日志中所示。 "GET /mysecure/Docs?cb=20414624755 HTTP/1.1" 200 881107 "-" "Mozilla/5.0 (Windows NT 6.1; rv:53.0) Gecko/20100101 Firefox/53.0" 我想用QUERY_STRING cb=20414624755来阻止所有请求。 为此我写了以下规则 RewriteCond %{QUERY_STRING} "^cb=20414624755$" [nocase] RewriteRule ^\/mysecure\/Docs$ – [forbidden,last] 但是请求没有被阻塞。在apache访问日志文件中,我可以看到具有这些模式的请求的200 Response code 。 请build议。