我已经重新配置了nginx,但我无法使用以下配置重启:
CONF:
server {
listen 80;
server_name www.example.com;
return 301 $scheme://example.com$request_uri;
}
server {
listen 80;
server_name example.com;
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
location /robots.txt {
alias /path/to/robots.txt;
access_log off;
log_not_found off;
}
location = /favicon.ico { access_log off; log_not_found off; }
location / {
proxy_pass_header Server;
proxy_set_header Host $http_host;
proxy_redirect off;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Scheme $scheme;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_connect_timeout 30;
proxy_read_timeout 30;
proxy_pass http://127.0.0.1:8000;
}
location /static {
expires 1M;
alias /path/to/staticfiles;
}
}
运行sudo nginx -c conf -t
以测试配置后返回以下错误我无法弄清楚究竟是什么问题
nginx: [emerg] "server" directive is not allowed here in /etc/nginx/sites-available/config:1
nginx: configuration file /etc/nginx/sites-available/config test failed
答案 0 :(得分:107)
这不是nginx
配置文件。它是nginx
配置文件的部分。
nginx
配置文件(通常称为nginx.conf
)如下所示:
events {
...
}
http {
...
server {
...
}
}
server
块包含在http
块中。
配置通常分布在多个文件中,方法是使用include
指令引入其他片段(例如从sites-enabled
目录中提取)。
使用sudo nginx -t
测试完整的配置文件,该文件从nginx.conf
开始,并使用include
指令引入其他片段。有关详情,请参阅this document。
答案 1 :(得分:2)
示例有效的nginx.conf用于反向代理;万一有人像我一样被困住
events {
worker_connections 4096; ## Default: 1024
}
http {
server {
listen 80;
listen [::]:80;
server_name 10.x.x.x;
location / {
proxy_pass http://10.y.y.y:80/;
proxy_set_header Host $host;
}
}
}
您也可以在docker中提供它
docker run --name nginx-container --rm --net=host -v /home/core/nginx/nginx.conf:/etc/nginx/nginx.conf nginx
答案 2 :(得分:0)
nginx.conf
文件的路径,该文件是Nginx的主要配置文件-也是必要时,该文件应包含其他Nginx Config文件的路径,/etc/nginx/nginx.conf
。
您可以通过在终端上键入此文件来访问和编辑该文件
cd /etc/nginx
/etc/nginx$ sudo nano nginx.conf
在此文件中,您还可以包括其他文件-可以具有SERVER指令作为独立的SERVER BLOCK-不必在HTTP或HTTPS块内,如上面接受的答案所阐明的。
我重复一遍-如果您需要在PRIMARY Config文件本身中定义一个SERVER BLOCK,则必须在/etc/nginx/nginx.conf
文件中作为主要配置的封闭HTTP或HTTPS块中定义该SERVER BLOCK。 Nginx的文件。
还请注意-如果定义,则可以确定,服务器块直接不将其包含在位于路径/etc/nginx/conf.d
的文件中的HTTP或HTTPS块内。另外,要使此工作有效,您将需要在PRIMARY Config文件中包含此文件的路径,如下所示:-
http{
include /etc/nginx/conf.d/*.conf; #includes all files of file type.conf
}
此外,您可以从PRIMARY Config文件(行
)中注释掉http{
#include /etc/nginx/sites-available/some_file.conf; # Comment Out
include /etc/nginx/conf.d/*.conf; #includes all files of file type.conf
}
且无需在/etc/nginx/sites-available/
中保留任何配置文件,也不需要SYMBOLIC将它们链接到/etc/nginx/sites-enabled/
,请注意,这对我有用-以防有人认为它不适合他们或此类配置是非法的等,请留下评论,这样我可以纠正自己-谢谢。
编辑:-根据最新版的Nginx官方Cookbook,我们无需在-/etc/nginx/sites-enabled/
中创建任何配置,这是较旧的做法,现已弃用。
因此不需要INCLUDE DIRECTIVE include /etc/nginx/sites-available/some_file.conf;
。
来自Nginx CookBook页面的报价-5。
“在某些程序包存储库中,此文件夹被命名为启用站点的,并且 配置文件从名为site-available的文件夹链接; 不赞成使用此约定。”
答案 3 :(得分:0)
在配置导入的文件内的任何地方都可能有错字。例如,我在配置文件中做了一个错字:
loccation /sense/movies/ {
mp4;
}
(位置而不是位置),这会导致错误:
nginx: [emerg] "server" directive is not allowed here in /etc/nginx/sites-enabled/xxx.xx:1