nginx: [emerg]在/etc/nginx/sites-enabled/example.com的第3行出现未知指令“ ”。

21

我遵循了这个网站http://raspberrypihelp.net/tutorials/24-raspberry-pi-webserver来在我的Raspberry Pi上设置HTTP服务器nginx并尝试建立一个名叫example.com的网站。但是当我运行sudo service nginx restart时,它显示:

重新启动nginx:nginx:[emerg] /etc/nginx/sites-enabled/example.com:3中的未知指令""

这里是example.com的代码。

    server {

    server_name example.com 192.168.1.88;

    access_log /srv/www/example.com/logs/access.log;

    error_log /srv/www/example.com/logs/error.log;

    root /srv/www/example.com/public/;

    location / {

        index index.php index.html index.htm;

        try_files $uri $uri/ /index.php?$args;

    }

    location ~ \.php$ {

        include /etc/nginx/fastcgi_params;

        fastcgi_pass unix:/var/run/php5-fpm.sock;

        fastcgi_index index.php;

        fastcgi_param SCRIPT_FILENAME /srv/www/example.com/public$fastcgi_script_name;

    }

    location /phpmyadmin {

        root /usr/share/;

        index index.php index.html index.htm;

        location ~ ^/phpmyadmin/(.+\.php)$ {

            try_files $uri =404;

            root /usr/share/;

            fastcgi_pass unix:/var/run/php5-fpm.sock;

            fastcgi_index index.php;

            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

            include /etc/nginx/fastcgi_params;

        }

        location ~* ^/phpmyadmin/(.+\.(jpg|jpeg|gif|css|png|js|ico|html|xml|txt))$ {

            root /usr/share/;

        }

    }

    location /phpMyAdmin {

        rewrite ^/* /phpmyadmin last;

    }

}

我只是按照步骤操作,但它无法成功运行。


它安装了哪个版本的nginx?根据这个网站,使用apt-get获取的版本存在一些问题。http://virtualitblog.blogspot.nl/2013/05/install-nginx-141-raspberry-pi.html 我可以建议添加nginx.org apt存储库并重新安装nginx吗?您能否运行:ldd /usr/sbin/nginx,并在gist.github.com上发布结果? - Matthew Brown
我使用了 /usr/sbin/nginx -t -v 命令来检查我正在使用 nginx/1.2.1 版本,我按照 http://nginx.org/en/linux_packages.html 的指示将其添加到 apt sources.list 中,当我运行 sudo apt-get install nginx 时,它返回 nginx 已经是最新版本。有一件事我忘了说,就是我可以访问 http://127.0.0.1/ 并看到默认站点 (/usr/share/nginx/www/index.html)。 - Confucius
请选取对您最有效的答案。谢谢。 - Philll_t
9个回答

44

我有同样的问题,那就是从网页上复制/粘贴配置代码时出现了一些不干净的EOL(行尾)字符。

编辑器没有显示它们,但是nginx把它们当作指令处理。

只需删除每个EOL并重新添加即可。


1
我遇到了同样的错误。一开始没想到这是错误所在。我尝试将文本复制粘贴到记事本中。试图使用在线工具清理我的文本。但是Windows系统一直出问题。我通过启动Linux虚拟机并创建相同的文档来解决了这个问题。然后,我将文件传输到Windows系统并将其用于我的脚本。它奏效了。我无法区分Linux文件和Windows文件之间的区别。但是它为我解决了问题。 - Kiksen
1
因此,Windows中的行尾是CRLF或\r\n。使用nginx时,解析器无法理解Windows的CRLF,但只能理解LF(\n)。使用编辑器删除它们即可正常工作。 - Martijn van Wezel
还要检查BOM(字节顺序标记);因为我的IDE默认添加了BOM,所以NGINX无法读取我的配置。 - simshaun

11

听起来你在这里做了一些复制和粘贴工作。在行末(EOL)可能会抓到一些无法看到的额外字符,这并不罕见。尝试以下操作:

使用此工具处理文本:http://www.textfixer.com/tools/remove-line-breaks.php

然后修复任何可能已被删除且会受到注释影响的换行符。

这对我有用,希望对你也有用。


2
似乎 nginx 二进制文件是使用 --without-http_fastcgi_module 选项编译的。这不是默认设置。请尝试下载或编译其他二进制文件。
尝试运行:
nginx -V

使用大写 V(即-v)来查看编译 nginx 时使用的选项。


好的方法,但如何使用必要的选项重新编译? - ilyas Jumadurdyew

1

真的不知道怎么发生的,我已经使用“docker run”命令运行了我的nginx 1.14(debian:bullseye的默认apt),以提取其默认的nginx.conf文件,并打算更新它,然后在我的Dockerfile中使用它。

无论如何,在阅读了这个帖子中的评论之后,发现该文件是“UTF-16LE”格式...我不是专家,但它不是“UTF-8”格式。

解决方法如下:

从容器内部看到的问题:

me@docker-nginx $ head nginx.conf 
��
user www-data:qgis;
worker_processes auto;
pid /run/nginx.pid;
include /etc/nginx/modules-enabled/*.conf;
error_log /dev/stdout warn;


events {
    worker_connections 768;

me@docker-nginx  $ dos2unix nginx.conf 
dos2unix: converting UTF-16LE file nginx.conf to UTF-8 Unix format...

在工作目录下也解决了:
IntelliJ IDEA:在“UTF-8”后选择“转换”
输入图像描述


1

我在配置文件的中间编辑了一些文本,然后nginx在文件开头就开始显示这个错误。我复制了文件的内容,创建了一个新文件,将内容粘贴到新文件中,然后nginx停止显示这个错误。


这个人帮了我一把。哥们儿,我欠你一个人情。 - Theotonio
这个人帮了我大忙。哥们儿,我欠你一个人情。 - undefined

0

即使你错过了一个分号,你也会遇到同样的错误。

// Missed semicolon
fastcgi_pass unix:/var/run/php/php8.0-fpm.sock

// With semicolon
fastcgi_pass unix:/var/run/php/php8.0-fpm.sock;

0

我在运行“sudo nginx -t”时遇到了类似的错误消息:“未知指令'index.html'”。在纠正了index.html中的HTML语法错误后,问题得到了解决。


0
在我的情况下,我已经将配置文件nginx.conf存储在Github上。我使用了wget命令获取了代码的原始版本,因此导致了这个错误。
后来,我克隆了我的存储库,并使用克隆中的nginx.conf文件,问题得到了解决。

0

当我查看我的配置文件时,发现了语法错误,所以这可能是问题所在,请检查此路径。

nano /etc/nginx/sites-available/example.com

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接