环境:阿里云 centos7
flask web 应用, gunicorn 已经启动,访问ip:8888
正常访问
nginx 正常启动,无法直接访问 ip ,浏览器显示: This site can ’ t be reached
我有两个配置文件conf/nginx.conf
, site-enable/kaoshixing.conf
,内容分别如下:
user root;
worker_processes auto;
# worker_cpu_affinity auto;
error_log /home/admin/kaoshixing/nginx/logs/error.log;
pid /home/admin/kaoshixing/nginx/logs/nginx.pid;
worker_rlimit_nofile 65535;
events {
use epoll;
worker_connections 20480;
}
http {
include mime.types;
default_type application/octet-stream;
fastcgi_intercept_errors on;
log_format milog '$server_addr\t$hostname\t$remote_addr\t$http_x_forwarded_for\t$time_local\t$request_uri\t$request_length\t$bytes_sent\t$request_time\t$status\t$upstream_addr\t$upstream_cache_status\t$upstream_response_time\t$http_user_agent\t';
####full-format log for debug
log_format debug_log '$remote_addr\t$server_addr\t$hostname\t$time_local\t$host\t$request\t$status\t$body_bytes_sent\t$http_referer\t$http_user_agent\t$http_x_forwarded_for\t$request_uri\t$request_length\t$bytes_sent\t$request_body\t$request_time\t$upstream_response_time\t$upstream_addr\t$upstream_cache_status';
access_log /home/admin/kaoshixing/log/nginx/access.log milog;
sendfile on;
keepalive_timeout 65;
client_max_body_size 120m;
server_names_hash_bucket_size 128;
proxy_headers_hash_bucket_size 128;
proxy_headers_hash_max_size 8192;
proxy_connect_timeout 10;
proxy_read_timeout 120;
proxy_send_timeout 120;
proxy_buffer_size 16k;
proxy_buffers 4 64k;
proxy_busy_buffers_size 128k;
proxy_temp_file_write_size 128k;
gzip on;
gzip_types application/json application/x-json text/plain application/x-javascript text/css text/javascript application/xml text/xml image/jpeg image/gif image/png;
gzip_proxied expired no-cache no-store private auth;
gzip_min_length 1k;
gzip_buffers 16 64k;
gzip_http_version 1.1;
gzip_comp_level 6;
gzip_vary on;
limit_req_zone $server_port zone=tp:500m rate=1700r/s;
limit_req_zone $server_port zone=tps:500m rate=1100r/s;
limit_req_zone $binary_remote_addr zone=tip:500m rate=100r/s;
include /home/admin/kaoshixing/nginx/site-enable/*.conf;
}
*
upstream kaoshixing.com_backend{
server 0.0.0.0:8888 weight=1 max_fails=2 fail_timeout=30s;
}
server {
listen 80;
server_name www.kaoshixing.com;
access_log /home/admin/kaoshixing/nginx/logs/ksxing.com.log milog;
location / {
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_pass http://kaoshixing.com_backend;
}
}
server {
listen 443 ssl;
server_name www.kaoshixing.com;
access_log /home/admin/kaoshixing/nginx/logs/ksxing.com.log milog;
ssl on;
ssl_certificate ssl/kaoshixing.com.crt;
ssl_certificate_key ssl/kaoshixing.com.key;
ssl_session_cache shared:SSL:80m;
ssl_session_timeout 5m;
ssl_protocols SSLv2 SSLv3 TLSv1;
ssl_ciphers RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;
ssl_prefer_server_ciphers on;
location / {
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_pass http://kaoshixing.com_backend;
proxy_redirect http://www.kaoshixing.com https://www.kaoshixing.com;
}
}
server {
listen 80;
server_name kaoshixing.com;
access_log /home/admin/kaoshixing/nginx/logs/ksxing.com.log milog;
location / {
rewrite ^(.*) http://www.$host$1 redirect;
}
}
Avez-vous essayé nginx -t pour vérifier si le fichier de configuration est correct ?
Vérifiez que http et https sont configurés avec le même nom de serveur. Essayez de configurer le port 80 en https et voyez si cela fonctionne
serveur {
écouter 80;
écouter 443 ssl;
......
}
Parce que vous avez défini
server_name
, nginx ne surveille que le nom de domaine, pas l'IP. En d’autres termes, nginx ne connaît pas l’adresse IP de son propre réseau externe, il obtiendra les informations du fichier de configuration.La solution simple est de supprimer
server_name
.Vous pouvez également faire cela
server_name 1.1.1.1 www.kaoshixing.com;
Mais de cette façon, la résolution de noms pan-domaine ne peut pas être effectuée.Parce que vous avez défini le nom du serveur dans tous les blocs du serveur, lorsque le navigateur y accède, nginx fera correspondre le nom du serveur un par un. Si aucun d'entre eux ne correspond (accessible avec IP), nginx utilisera default_server, mais vous n'avez pas défini default_server. Problème C'est peut-être là le problème. Essayez de remplacer un bloc de serveur par celui-ci ?
(De plus, le port 80 peut être occupé par d'autres programmes)
Considérez la politique de sécurité d'Alibaba Cloud et la politique de pare-feu de CentOS7.
CentOS7 n'ouvre pas le port 80 par défaut.
Confirmez s'il s'agit d'un problème de configuration qui empêche le démarrage de nginx ou si le réseau externe telnet 80 est bloqué. Ce que je rencontre est généralement dû aux paramètres du pare-feu ou à 80 occupés par Apache installé dans le vps par défaut.
Le port 80 des fournisseurs de cloud nationaux doit être enregistré avant de pouvoir être publié.
Vérifiez également la stratégie de groupe de sécurité et le pare-feu VPC séparément.