环境:阿里云 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;
}
}
Pernahkah anda mencuba nginx -t untuk menyemak sama ada fail konfigurasi adalah betul?
Pastikan bahawa kedua-dua http dan https dikonfigurasikan dengan nama_pelayan yang sama. Cuba konfigurasikan port 80 ke dalam https dan lihat jika ia berfungsi
pelayan {
dengar 80;
dengar 443 ssl;
......
}
Oleh kerana anda menetapkan
server_name
, nginx hanya memantau nama domain, bukan IP. Dengan kata lain, nginx tidak mengetahui IP rangkaian luarannya sendiri, ia akan mendapat maklumat daripada fail konfigurasi.Penyelesaian mudahnya ialah membuang
server_name
.Anda juga boleh melakukan ini
server_name 1.1.1.1 www.kaoshixing.com;
Tetapi dengan cara ini, resolusi nama pan-domain tidak boleh dilakukan.Oleh kerana anda telah menetapkan nama_server dalam semua blok pelayan, apabila penyemak imbas mengakses, nginx akan memadankan nama_server satu demi satu. Jika tiada satu pun daripadanya sepadan (diakses dengan IP), nginx akan menggunakan pelayan_default, tetapi anda belum menetapkan pelayan_default. Masalah Mungkin ini masalahnya Cuba tukar blok pelayan kepada ini?
(Juga, port 80 mungkin diduduki oleh program lain)
Pertimbangkan dasar keselamatan Alibaba Cloud dan dasar tembok api CentOS7.
CentOS7 tidak membuka port 80 secara lalai.
Sahkan sama ada masalah konfigurasi yang menyebabkan nginx gagal dimulakan atau sama ada rangkaian luaran telnet 80 disekat. Apa yang saya temui biasanya disebabkan oleh tetapan firewall atau 80 sedang diduduki oleh apache yang dipasang dalam vps lalai.
Port 80 vendor awan domestik perlu didaftarkan sebelum mereka boleh dikeluarkan.
Semak juga dasar kumpulan keselamatan dan tembok api VPC secara berasingan.