两天前我可以看到那个页面,上面写着“欢迎使用 nginx”,但是现在当我尝试访问它时,它显示 404 页面未找到...这是为什么?在我的 sites-enabled 文件夹中,我有一个名为 default 的文件,它有以下内容:
# You may add here your
# server {
# ...
# }
# statements for each of your virtual hosts
server {
listen 80;
server_name 127.0.0.1;
access_log /var/log/nginx/localhost.access.log;
location / {
root /var/www/nginx-default;
index index.html index.htm;
}
location /doc {
root /usr/share;
autoindex on;
allow 127.0.0.1;
deny all;
}
location /images {
root /usr/share;
autoindex on;
}
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
#error_page 500 502 503 504 /50x.html;
#location = /50x.html {
# root /var/www/nginx-default;
#}
# proxy the PHP scripts to Apache listening on 127.0.0.1:80
#
#location ~ \.php$ {
#proxy_pass http://127.0.0.1;
#}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /var/www/nginx-default$fastcgi_script_name;
include fastcgi_params;
}
# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
location ~ /\.ht {
deny all;
}
}
# another virtual host using mix of IP-, name-, and port-based configuration
#
#server {
#listen 8000;
#listen somename:8080;
#server_name somename alias another.alias;
#location / {
#root html;
#index index.html index.htm;
#}
#}
# HTTPS server
#
#server {
#listen 443;
#server_name localhost;
#ssl on;
#ssl_certificate cert.pem;
#ssl_certificate_key cert.key;
#ssl_session_timeout 5m;
#ssl_protocols SSLv2 SSLv3 TLSv1;
#ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;
#ssl_prefer_server_ciphers on;
#location / {
#root html;
#index index.html index.htm;
#}
#}
这是我的 nginx.conf 文件:
user www-data;
worker_processes 4;
error_log /var/log/nginx/error.log;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
# multi_accept on;
}
http {
include /etc/nginx/mime.types;
access_log /var/log/nginx/access.log;
sendfile on;
#tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65;
tcp_nodelay on;
gzip on;
gzip_disable "MSIE [1-6]\.(?!.*SV1)";
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;
}
# mail {
# # See sample authentication script at:
# # http://wiki.nginx.org/NginxImapAuthenticateWithApachePhpScript
#
# # auth_http localhost/auth.php;
# # pop3_capabilities "TOP" "USER";
# # imap_capabilities "IMAP4rev1" "UIDPLUS";
#
# server {
# listen localhost:110;
# protocol pop3;
# proxy on;
# }
#
# server {
# listen localhost:143;
# protocol imap;
# proxy on;
# }
# }
我在这里做错了什么?我在启用站点中还设置了其他虚拟主机...
更新:
server_name 指令是:-admin.api.frapi
-api.frapi
-default
-example.com
-php.example.com
答案1
Nginx 将尝试通过匹配主机名来查找合适的虚拟主机。如果未找到匹配项,它将使用第一个定义的虚拟主机或名为 default 的虚拟主机。要定义默认虚拟主机,请使用
server {
# The default/fallback server must have 'default' in the listen line:
listen 80 default;
# Catch all non-matching requests
server_name _;
access_log /var/log/nginx/localhost.access.log;
location / {
root /var/www/nginx-default;
index index.html index.htm;
}
#etc ...
}
答案2
嗯,在我看来,admin.api.frapi 是“默认”,因为它位于目录中的最高位置。尝试将文件 default 重命名为 000-default。
更多信息:nginx 按字母顺序浏览已启用的站点。如果所需主机名(从 HTTP 请求给出)没有虚拟主机配置,则 nginx 将采用第一个文件。
答案3
您可以尝试在 /etc/nginx/sites-available/yourhostfile 中的主机文件中进行以下配置
server {
listen 80;
server_name example.com x.x.x.x;
ssl_certificate /etc/ssl/www.example.com.pem;
ssl_certificate_key /etc/ssl/www.example.com.pem;
将 xxxx 替换为您服务器的公网 IP 地址。