Nginx: [emerg] “server” directive is not allowed here

nginx

I'm having issues with my nginx server conf.

When I run nginx -t it says that everything is correct, but when I check my config file per file, it's KO.
It says :

nginx: [emerg] "server" directive is not allowed here in
/etc/nginx/sites-available/thebishop.fr.conf:1

here some conf files :
nginx.conf

user www-data;
worker_processes auto;
pid /run/nginx.pid;

events {
    worker_connections 768;
    # multi_accept on;
}

http {

    ##
    # Basic Settings
    ##

    sendfile on;
    tcp_nopush on;
    tcp_nodelay on;
    keepalive_timeout 65;
    types_hash_max_size 2048;
    server_tokens off;
    more_set_headers 'Server: 185.216.27.123';

    client_max_body_size 20M;
    fastcgi_buffers 16 16k; 
    fastcgi_buffer_size 32k;

    # server_names_hash_bucket_size 64;
    # server_name_in_redirect off;

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

    ##
    # SSL Settings
    ##

    ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # Dropping SSLv3, ref: POODLE
    ssl_prefer_server_ciphers on;

    ##
    # Logging Settings
    ##

    access_log /var/log/nginx/access.log;
    error_log /var/log/nginx/error.log;

    ##
    # Gzip Settings
    ##

    gzip on;
    gzip_disable "msie6";

    gzip_vary on;
    gzip_proxied any;
    gzip_comp_level 6;
    gzip_buffers 16 8k;
    gzip_http_version 1.1;
    gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;

    ##
    # Virtual Host Configs
    ##

    include /etc/nginx/conf.d/*.conf;
    include /etc/nginx/sites-enabled/*;
}

thebishop.fr.conf :

server {
   listen 80;
   server_name thebishop.fr www.thebishop.fr;
   return 301 https://$host$request_uri;
}

server {
    listen               443 ssl;
    server_name          thebishop.fr;
    ssl_certificate /etc/letsencrypt/live/thebishop.fr/fullchain.pem; # managed by Certbot
    ssl_certificate_key /etc/letsencrypt/live/thebishop.fr/privkey.pem; # managed by Certbot

    return 301 $scheme://www.thebishop.fr$request_uri;
}

server {
  listen 443 ssl;

    server_name www.thebishop.fr;
    root /var/www/html/thebishop.fr;

    index index.html index.php;

    location ~ \.php$ {
        fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;
        fastcgi_split_path_info ^(.+\.php)(/.*)$;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
        fastcgi_param DOCUMENT_ROOT $realpath_root;
    }

    error_log /var/log/nginx/thebishop.fr_error.log;
    access_log /var/log/nginx/thebishop.fr_access.log;

    ssl_certificate /etc/letsencrypt/live/thebishop.fr/fullchain.pem; # managed by Certbot
    ssl_certificate_key /etc/letsencrypt/live/thebishop.fr/privkey.pem; # managed by Certbot
    include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot

    # Redirect non-https traffic to https
    # if ($scheme != "https") {
    #     return 301 https://$host$request_uri;
    # } # managed by Certbot

}

#mail {
#   # See sample authentication script at:
#   # http://wiki.nginx.org/ImapAuthenticateWithApachePhpScript
# 
#   # 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;
#   }
#}

Best Answer

When you say "check your configuration file by file" how do you do this? And why? Plus what does "KO" stand for?

The "server" directive is only valid within an http blocks, so checking file by file is not going to work. So long as "nginx -t" works and nginx runs without errors I don't see a problem.

If I haven't answered your question please edit it to include more detail about exactly what you did including command line and output, Nginx errors, and remove abbreviations.