似乎是apache的地方所以这里去:)
古老的问题:我如何重定向HTTP-> HTTPS,然后只有在HTTPS时才进行身份验证?
哦 - 我想把它大部分放在一个可以包含在多个<directory>或<location>块中的片段中,所以没有基于虚拟主机级别随机路径的重写...
好吧,这就是我所拥有的似乎有用的东西:
在VirtualHost块的顶部
# Set ssl_off environment variable
RewriteEngine on
RewriteCond %{HTTPS} =on
RewriteRule ^ - [E=ssl]
Run Code Online (Sandbox Code Playgroud)
在位置或目录块中
RewriteEngine on
# Case 1 redirect port 80 SSL
RewriteCond %{HTTPS} !=on
RewriteCond %{SERVER_PORT} =80
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [R=301]
AuthType Basic
AuthBasicProvider external
AuthExternal auth_pam
AuthName "My Underpants"
AuthzUnixgroup on
Order Deny,Allow
Deny from all
Allow from env=!ssl
Satisfy any
Require group nice-users
Run Code Online (Sandbox Code Playgroud)
加号
所有这些条件都可以将Require's抽象为一个片段文件,以便在每个位置包含在一行中
它修复了强制每个位置的SSL和身份验证,因此错误的可能性更小
弊
血淋淋的地狱,这很难直观!我所知道的一切可能都很脆弱......
有没有更好的方法(不是我发现的......)?
如果有任何严重的缺陷,将非常欢迎评论:)
如果Apache有一个合理的配置语法与泛型,Aside Life会更容易
<If expression> </ If> …
以下是我现在所拥有的内容,.htaccess以及将来应该使用的内容:
RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule ^/?(.*) https://%{SERVER_NAME}/$1 [R,L]
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ index.php [NC,L]
Run Code Online (Sandbox Code Playgroud)
问题是:
我该怎么做才能改写 /tmp/some_image.png -> /image.php?file=some_image.png
我试图制定自己的规则,但没有成功.
谢谢.
我一直在浏览symfony2框架源代码.在他们的示例网站的htaccess文件中,我发现%{REQUEST_URI}::$1如下:
RewriteCond %{REQUEST_URI}::$1 ^(/.+)(.+)::\2$
RewriteRule ^(.*) - [E=BASE:%1]
Run Code Online (Sandbox Code Playgroud)
该规则上面的评论解释道
以下内容将所有其他查询重写为前端控制器.该条件确保如果您使用Apache别名进行大规模虚拟主机托管,则会预先设置基本路径以允许正确解析app.php文件; 它也适用于非混淆环境,提供安全,一刀切的解决方案.
但是,这并不能解释::$1或::\2.
他们是反向引用吗?如果没有,他们是什么?他们的目的是什么?
我是整个 mod_wsgi 的新手,并通过 apache 提供文件。我对烧瓶真的很满意,但这是我无法理解的。我做了hello-world程序,成功显示hello world!现在我想显示一个图像文件。所以我将我的 hello-world.py 更新为:
from flask import *
yourflaskapp = Flask(__name__)
@yourflaskapp.route("/")
def hello():
file="203.jpg"
return render_template("hello.html",file=file)
# return"HEY"
if __name__ == "__main__":
yourflaskapp.run()
Run Code Online (Sandbox Code Playgroud)
我的目录结构类似于:/var/www/hello-world
/hello-world
test.py
yourflaskapp.wsgi
/static
-203.jpg
/templates
-hello.html
Run Code Online (Sandbox Code Playgroud)
我的模板很简单:
<!DOCTYPE html>
<html><head><title>hi</title></head>
<body>
<img src="{{url_for('static',filename=file)}}"/>
</body></html>
Run Code Online (Sandbox Code Playgroud)
我的 apache conf 文件是:
<VirtualHost *:80>
WSGIDaemonProcess yourflaskapp
WSGIScriptAlias / /var/www/hello-world/yourflaskapp.wsgi
Alias /static/ /var/www/hello-world/static
Alias /templates/ /var/www/hello-world/templates
<Directory /var/www/hello-world>
WSGIProcessGroup yourflaskapp
WSGIApplicationGroup %{GLOBAL}
Order deny,allow
Allow from all
</Directory>
<Directory /var/www/hello-world/static>
Order allow,deny
Allow from all …Run Code Online (Sandbox Code Playgroud) 当我开始这个步骤时,我正在安装mod-wsgi并遵循本指南:
要根据Apache的安装将Apache模块安装到Apache模块的标准位置,请运行:
Run Code Online (Sandbox Code Playgroud)make install
但是当我跑步时,sudo make install我得到了这个错误
wrong number of arguments to instdso.sh
Usage: instdso.sh SH_LIBTOOL-value dso-name path-to-modules
apxs:Error: Command failed with rc=65536
Run Code Online (Sandbox Code Playgroud)
我尝试在网上搜索此错误,但找不到任何东西和mod-wsgi的安装问题页面根本没有谈论这个错误.知道什么可能是错的吗?
我想安装Nginx,但是80端口已经被Apache2占用了。我通过以下方式阻止它:
$ sudo kill -9 my-apache-pid
$ sudo service apache2 stop
$ sudo /etc/init.d/apache2 stop
[ ok ] Stopping apache2 (via systemctl): apache2.service.
Run Code Online (Sandbox Code Playgroud)
我可以安装 Nginx。我用sudo systemctl status nginx。它显示运行良好,Apache2 似乎不活跃。但是当我在浏览器中输入 IP 地址时,它仍然显示 Apache2 hello-page。为什么?
我需要在 PHP 7.2 上安装GeoIP。为此,我使用以下命令 -
sudo apt-get -y install gcc make autoconf libc-dev pkg-config
sudo apt-get -y install libgeoip-dev
sudo pecl7.2-sp install geoip-beta
Run Code Online (Sandbox Code Playgroud)
前两个命令已成功运行,但是在运行第三个命令时出现以下错误 -
sudo: pecl7.2-sp: command not found
Run Code Online (Sandbox Code Playgroud)
任何建议,如何在 php 7.2 上安装 pecl 或以任何其他方式在 php 7.2 上安装 GeoIP。
我在 ubuntu 18.04 上安装了 apache2。这是具有所有默认配置的全新安装。
我试图启动 apache2 但失败了。这就是我所看到的。
# systemctl status apache2.service
? apache2.service - The Apache HTTP Server
Loaded: loaded (/lib/systemd/system/apache2.service; enabled; vendor preset: enabled)
Drop-In: /lib/systemd/system/apache2.service.d
??apache2-systemd.conf
Active: failed (Result: exit-code) since Wed 2020-03-11 23:17:35 WIB; 13s ago
Process: 9151 ExecStart=/usr/sbin/apachectl start (code=exited, status=139)
Mar 11 23:17:35 xdn.id systemd[1]: Starting The Apache HTTP Server...
Mar 11 23:17:35 xdn.id apachectl[9151]: Segmentation fault
Mar 11 23:17:35 xdn.id apachectl[9151]: Action 'start' failed.
Mar 11 23:17:35 xdn.id apachectl[9151]: The Apache error log …Run Code Online (Sandbox Code Playgroud) 我目前正在使用官方php:7.4-apache映像,我想将一些信息和错误记录到 docker 日志中。
我意识到 PHP 不直接记录,而是记录到 Apache2 服务器,因为这是解释 PHP 的服务器。
尽管如此,我还是尝试了使用官方 docker 文档中的信息的直接方法:
<?php
error_log('testlog', 3, '/proc/self/fd/1');
error_log('testerror', 3, '/proc/self/fd/2');
Run Code Online (Sandbox Code Playgroud)
这给了我一个“无法打开流,文件不存在”的警告。
我还注意到,简单地调用error_log('test')会创建以下日志,而不会写入 stderr:
[Tue Nov 10 11:39:46.005650 2020] [php7:notice] [pid 17] [client 172.25.0.1:56576] test
Run Code Online (Sandbox Code Playgroud)
我试图弄清楚是否有任何特殊的方法可以向 Apache2 stdout/stderr 发送消息,但我找不到任何有用的东西。
有没有办法实现这一点,或者这只是在容器中记录 PHP 的错误方法?
!!编辑:!!
到目前为止,我已经设法发现原始 Dockerfile 中的日志定义在此文件中处理为/dev/stderr& /dev/stdout。
我还发现了以下可能性:
error_log('test', 3, 'php://stdout');
error_log('testerr', 3, 'php://stderr');
Run Code Online (Sandbox Code Playgroud)
但这会产生以下输出:
> test
> 172.25.0.1 - - [18/Nov/2020:13:19:48 +0000] "GET / HTTP/1.1" 200 229 "-" "Mozilla/5.0 (Windows …Run Code Online (Sandbox Code Playgroud) 我已经使用 fastapi 开发了一个 api,它将充当接收短信请求并调用短信 api 发送所述短信的包装器,现在我已准备好部署它。这是代码:
import logging
import uvicorn
from fastapi import FastAPI, HTTPException
from pydantic import BaseModel
from fastapi.middleware.trustedhost import TrustedHostMiddleware
import verifier
logging.basicConfig(
format='%(asctime)s - %(funcName)s - %(levelname)s - %(message)s',
level=logging.INFO
)
# get logger
logger = logging.getLogger(__name__)
bot_verifier = None
class DataForBot(BaseModel):
number: str
msg_txt: str
def get_application():
app = FastAPI(title='bot_wrapper', version="1.0.0")
return app
app = get_application()
@app.on_event("startup")
async def startup_event():
global bot_verifier
try:
bot_verifier = await verifier.Verifier.create()
except Exception as e:
logger.error(f"exception occured during bot …Run Code Online (Sandbox Code Playgroud)