상황에 대한 간략한 이미지

  • server_nameDNS 서버를 제어할 수 없기 때문에 도메인 주소를 사용할 수 없습니다. 내 웹 서버에 연결하려면 공개 IP를 사용해야 합니다.
  • 그래서 로 설정 server_name했지만 _;요청 http://firewall-public-ip:5000하면 로 리디렉션됩니다 http://localhost:5000.
  • 일반적으로 리디렉션을 사용하지 않는 다른 페이지를 열 수 있습니다. 예를 들어 액세스 http://firewall-public-ip:5000/login및 로그인이 가능하지만 로그인 http://localhost:5000/login후 로그인 페이지가 리디렉션을 사용하기 때문에 로 리디렉션됩니다.

nginx.conf:

# For more information on configuration, see:
#   * Official English Documentation: http://nginx.org/en/docs/
#   * Official Russian Documentation: http://nginx.org/ru/docs/

user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;

# Load dynamic modules. See /usr/share/doc/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 4096;
    proxy_hide_header X-Powered-By;
    proxy_hide_header Server;

    include             /etc/nginx/mime.types;
    default_type        application/octet-stream;

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

server {
    listen 5000;

    server_name _;
    server_name_in_redirect off;
    ssl_protocols TLSv1.2;

    location '/' {
        proxy_pass http://unix:/var/sockets/gunicorn.sock;
    }
  }
}

이 문제를 해결하려면 어떻게 해야 하나요? 다시 말하지만 이 서버에 도메인 주소를 사용할 수 없습니다.

*EDIT는 응용 프로그램 리디렉션을 추가했습니다.

@blueprint.route('/')
def route_default():
    return redirect(url_for('authentication_blueprint.login'))


@blueprint.route('/login', methods=['GET', 'POST'])
def login():
    login_form = LoginForm(request.form)
    if 'login' in request.form:

        # read form data
        username = request.form['username']
        password = request.form['password']

        # Locate user
        user = Users.query.filter_by(username=username).first()

        # Check the password
        if user and verify_pass(password, user.password):

            login_user(user)
            return redirect(url_for('authentication_blueprint.route_default'))

        # Something (user or pass) is not ok
        return render_template('accounts/login.html',
                               msg='Wrong user or password',
                               form=login_form)

    if not current_user.is_authenticated:
        return render_template('accounts/login.html',
                               form=login_form)
    return redirect(url_for('home_blueprint.index'))

앱 인증.__init__.py

from flask import Blueprint

blueprint = Blueprint(
    'authentication_blueprint',
    __name__,
    url_prefix=''
)
answer

nginx는 이 구성으로 리디렉션을 보내지 않습니다.

대상인 애플리케이션에서 리디렉션이 발생합니다 proxy_pass. 응용 프로그램에는 IP 주소를 입력해야 하는 "기본 URL" 설정이 있을 가능성이 큽니다.