我有一个网站运行在VPS上,使用Flask 作为后端API服务器,Angular 前端,作为反向代理.我在我的Nginx上安装了SSL.问题是我可以使用HTTP连接到FlaskTM服务器,但不能使用HTTPS连接.
https://app.my-domain.com/api/login #<---- doesn't work
http://app.my-domain.com/api/login #<---- works properly
下面是我收到的错误
以下是我的Nginx配置
server
{
server_name app.my-domain.com;
#expires 0;
#add_header Cache-Control private;
# flask backend server
location /api/*
{
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Host $http_host;
proxy_pass http://0.0.0.0:5000/;
proxy_redirect http://0.0.0.0:5000/ /;
}
#angular static files location after compilation using ng build --configuration production
location /
{
expires -1;
default_type application/javascript;
add_header Pragma "no-cache";
add_header Cache-Control "no-store, no-cache, must-revalidate, post-check=0, pre-check=0";
root /root/workspace/FrontEnd/dist;
index index.html index.htm;
try_files $uri $uri/ /index.html =404;
}
access_log /var/log/nginx/my-domain.com.access.log;
error_log /var/log/nginx/my-domain.com.error.log;
listen 443 ssl; # managed by Certbot
ssl_certificate /etc/letsencrypt/live/app.my-domain.com/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/app.my-domain.com/privkey.pem; # managed by Certbot
include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
}
server
{
if ($host = app.my-domain.com) {
return 301 https://$host$request_uri;
} # managed by Certbot
listen 80;
listen [::]:80;
server_name app.domain.com;
return 404; # managed by Certbot
}
以下是负责发出请求的Angular 代码
const header=new HttpHeaders({});
const httpOptions = {
headers: new HttpHeaders({ 'Content-Type': 'application/json'}), withcredentials: true
};
@Injectable({
providedIn: 'root',
})
export class AuthService {
// create var res
constructor(private http: HttpClient) {}
private isLogged: BehaviorSubject<boolean> = new BehaviorSubject<boolean>(false);
login(email: string, password: string): Observable<any> {
// pass var res in return
const formData = new FormData();
formData.append('email', email);
formData.append('password', password);
console.log(AUTH_API);
return this.http.post( './api/login', formData ); #<----------
}
}
下面是我的Flask 密码,
app = Flask(__name__, static_folder='static', template_folder='static')
gunicorn_error_logger = logging.getLogger('gunicorn.error')
app.logger.handlers.extend(gunicorn_error_logger.handlers)
app.logger.setLevel(logging.DEBUG)
db.init_app(app)
migrate = Migrate(app, db)
CORS(app, resources={r'/*': {'origins': '*'}}, supports_credentials=True)
from views import LoginPageView
app.add_url_rule('/api/login', view_func=LoginPageView.as_view('login_page', app.logger), methods=['GET','POST'])
if __name__ == '__main__':
app.run(debug=True)
我正在使用以下命令运行FASK
gunicorn --workers 4 --bind 0.0.0.0:5000 wsgi:app --worker-class eventlet
如何确保我的所有请求都是HTTPS并且工作正常,并禁用http请求?