Python의 Flask 프레임에서 SERVER_NAME 도메인 이름 항목 구성 자습서

5558 단어 FlaskSERVER NAME
Flask의 SERVER_NAME는 주로 두 가지 일을 합니다.
  • Flask가 이벤트 요청(request) 외에 절대 URL(예를 들어 메일에 사이트 URL을 삽입하는 것)을 생성하는 것을 협조합니다
  • 하위 도메인 이름 지원에 사용됩니다
  • 많은 사람들이 그것이 이 두 가지 일 이외의 다른 일을 할 수 있다고 착각한다.
    1. 첫 번째 일: 절대 URL
    알아요, URL_for 기본적으로 상대 URL이 생성되며 매개 변수가 있습니다_external, 만약 진짜로 설정하면 절대 URL이 생성됩니다 (즉, HTTP 시작 부분에 도메인 이름과 같은 정보가 있는 것).SERVER_를 지정하지 않으면NAME, 기본적으로 현재 활성 요청(request)을 사용하여 URL을 생성합니다.
    다음 예제에서는 다음과 같이 설명합니다.
    
    # filename myapp.py
    from flask import Flask, url_for
    
    app = Flask(__name__)
    
    @app.route('/')
    def index():
     return 'hello flask'
    
    @app.route('/test')
    def test():
     return url_for('index', _external=True)
    
    if __name__ == '__main__':
     app.run(debug=True)
    
    
    1. [상황1] 브라우저를 통해 액세스
    앱이 실행된 후 로컬 5000 포트에서 감청합니다.
    
    (env) F:\tmp>python myapp.py
     * Running on http://127.0.0.1:5000/
     * Restarting with reloader
    
    브라우저를 통해 액세스하는 경우http://127.0.0.1:5000/test, 다음 항목이 반환됩니다.http://127.0.0.1:5000/.
    브라우저를 통해 액세스하는 경우http://localhost:5000/test, 다음 항목이 반환됩니다.http://localhost:5000/.
    SERVER_가 설정되어 있지 않음을 알 수 있습니다.NAME의 경우 url_for 생성된 절대 URL은 요청한 URL에 의존합니다.브라우저를 통해 접근하지 않는 상황을 살펴보겠습니다.
    2. [상황2] 비브라우저 액세스
    이 상황은request 요청이 없는 상황을 가리킨다.
    우리는 Python Shell을 통해 시뮬레이션합니다.
    
    >>> from myapp import app
    >>> with app.app_context():
    ... print url_for('index', _external=True)
    ...
    
    
    Traceback (most recent call last):
     File "<stdin>", line 2, in <module>
     File "F:\tmp\env\lib\site-packages\flask\helpers.py", line 287, in url_for
     raise RuntimeError('Application was not able to create a URL '
    RuntimeError: Application was not able to create a URL adapter for request indep
    endent URL generation. You might be able to fix this by setting the SERVER_NAME
    config variable.
    
    위의 뜻은 프로그램이 request와 관련이 없는 URL을 만드는 데 사용할 URL 어댑터를 만들 수 없다는 것입니다. SERVER_를 설정할 수 있습니다NAME가 이 문제를 해결합니다.
    자, 다음은 SERVER_NAME 값을 설정한 후 다음을 수행합니다.
    
    >>> app.config['SERVER_NAME'] = 'example.com'
    >>> with app.app_context():
    ... print url_for('index', _external=True)
    ...
    
    
    http://example.com/
    
    PS: 일반 SERVER_NAME 는 웹 사이트의 도메인 이름으로 설정됩니다.
    Flask-Mail 관련 글에는 다음과 같은 내용이 있습니다.
    많은 Flask 확장은 하나의 활성 응용 프로그램과 요청 상하문에서 실행된다고 가정하고, Flask-Mail의send 함수는current_앱이라는 상하문이 생겼기 때문에 메일로 하겠습니다.send () 함수가 한 라인에서 실행될 때 인위적으로 상하문을 만들어야 합니다. 모두send_async_이메일에서 앱을 사용했습니다.app_컨텍스트 () 를 만듭니다.
    따라서request에 의존하지 않는 절대 URL(예를 들어 비동기적으로 메일을 보낼 때 메일에서 사이트의 특정 페이지를 만드는 URL)을 생성하려면 SERVER_를 설정해야 한다NAME.
    두 번째: 하위 도메인 이름 지원
    SERVER_NAME 키는 하위 도메인 이름 지원에 사용됩니다.Flask는 기존 서버 이름을 알기 전에 하위 도메인 부분을 추측할 수 없기 때문에 하위 도메인을 사용하고 싶다면 이 옵션이 필요하고 세션 쿠키에도 사용됩니다.
    Flask에만 하위 도메인 이름을 모르는 문제가 있는 것이 아니라 브라우저에도 이런 문제가 있다는 것을 명심하세요.대부분의 현대 웹 브라우저는 서버 이름에 점이 없는 크로스 도메인 이름 쿠키를 허용하지 않습니다.따라서 서버의 이름이localhost라면,localhost와 모든 하위 도메인 이름에 쿠키를 설정할 수 없습니다.'my 응용 프로그램과 같은 적합한 서버 이름을 선택하십시오.local', 원하는 서버 이름 + 하위 도메인 이름을 host 설정에 추가하거나 로컬bind를 설정합니다.
    Examples
    
       -------->http://book.muxistudio.com
       ||
    http://muxistudio.com-------->http://blog.muxistudio.com
       ||
       -------->http://share.muxistudio.com
    
    1. 로컬 테스트
    /etc/hosts 파일 수정
    주의: 로컬 테스트에서만 유효합니다!
    필요한 모든 하위 도메인 이름을 추가합니다. 예:
    
    127.0.0.1 flask.dev  localhost #  
    127.0.0.1 test.flask.dev localhost #  
    127.0.0.1 othertest.flask.dev localhost #  
    
    Flask에 적용된 구성 파일에'SERVER_ 추가NAME'
    애플리케이션 구성에서'SERVER_NAME 는 지정된 도메인 이름과 기본 감청 포트로 설정됩니다. 예:
    
    #...
    app = Flask(__name__)
    app.config['SERVER_NAME'] = 'flask.dev:5000'
    #...
    
    
    2. 청사진 구성
    청사진의subdomain은hosts 파일에 추가된 하위 도메인 이름입니다
    
    #...
    # Blueprint declaration
    bp = Blueprint('subdomain', __name__, subdomain="<user>")
    
    #...
    
    # Register the blueprint into the application
    app.register_blueprint(bp)
    #...
    
    
    3. 서버 측 구성
    Flask 응용 프로그램 설정의'SERVER_NAME 운영 환경에 등록된 도메인 이름으로 수정
    
    flask.dev:5000 ----> muxistudio.com
    
    
    4.Nginx 구성
    감청 포트를 설정하고 다음 예에서 정규 표현식을 사용하여 사용자가 방문한 하위 도메인 이름을 가져옵니다. www에 대해서는 정규 표현식을 가져올 때 필터링하고 사용자가 방문할 때 www.yourdomain으로 리디렉션해야 합니다.com 페이지, 그렇지 않으면 www은 하위 도메인 이름으로 간주됩니다.
    구성 인스턴스:
    
     server {
     listen 80;
     listen 443 ssl;
    
     ssl_certificate /usr/local/nginx/ssl/nginx.crt;
     ssl_certificate_key /usr/local/nginx/ssl/nginx.key;
    
     server_name ~^www\.(?<user>.+\.)?markdownblog\.com$;
     return 301 "$scheme://${user}markdownblog.com$request_uri";
     }
    
     server {
     listen 80;
     listen 443 ssl;
    
     ssl_certificate /usr/local/nginx/ssl/nginx.crt;
     ssl_certificate_key /usr/local/nginx/ssl/nginx.key;
    
     server_name ~^.+\.markdownblog\.com$ markdownblog.com;
    
     location / {
      proxy_set_header Host $http_host;
      proxy_set_header X-Real-IP $remote_addr;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_pass http://127.0.0.1:8085;
     }
    }
    

    좋은 웹페이지 즐겨찾기