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
답변
이것은 nginx
구성 파일 이 아닙니다 . 그것은이다 부분 의 nginx
구성 파일.
nginx
(보통라는 구성 파일 nginx.conf
)과 같이 표시됩니다
events {
...
}
http {
...
server {
...
}
}
server
블록은 내에 봉입 http
블록.
종종 구성은 include
지시문을 사용하여 추가 프래그먼트 (예 : sites-enabled
디렉토리에서) 를 가져옴 으로써 여러 파일에 분산 됩니다.
사용 sudo nginx -t
에서 시작하는 전체 구성 파일, 테스트 nginx.conf
사용하여 추가 조각과 당긴를 include
지시합니다. 자세한 내용은 이 문서 를 참조하십시오 .
답변
역방향 프록시에 대한 유효한 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 run --name nginx-container --rm --net=host -v /home/core/nginx/nginx.conf:/etc/nginx/nginx.conf nginx
답변
받는 경로 nginx.conf
도 필요 할 때와 같이 다른 Nginx의 구성 파일에 대한 경로를 포함한다 파일입니다 – Nginx에 대한 기본 구성 파일입니다 /etc/nginx/nginx.conf
.
터미널에 입력하여이 파일에 액세스하고 편집 할 수 있습니다.
cd /etc/nginx
/etc/nginx$ sudo nano nginx.conf
또한이 파일에는 위의 승인 된 답변에서 명확히 설명한대로 HTTP 또는 HTTPS 블록 내에있을 필요가없는 다른 파일 (독립 SERVER BLOCK으로 SERVER 지시문을 가질 수 있음)을 포함 할 수 있습니다.
반복합니다-PRIMARY Config 파일 자체에 SERVER BLOCK을 정의해야하는 경우 SERVER BLOCK은 /etc/nginx/nginx.conf
Nginx의 기본 구성 파일 인 파일에 포함 된 HTTP 또는 HTTPS 블록 내에 정의해야합니다 .
또한 경로에있는 파일에서 HTTP 또는 HTTPS 블록 내에서 직접 둘러싸 지 않는 SERVER BLOCK을 정의하면 괜찮습니다 /etc/nginx/conf.d
. 또한이 작업을 수행하려면 아래와 같이 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 Link도 필요하지 않습니다 /etc/nginx/sites-enabled/
. 친절하게도 이것이 저에게 효과적이라는 점에 유의하십시오. 나 자신을 바로 잡을 수 있습니다. 감사합니다.
편집 :-공식 Nginx CookBook의 최신 버전에 따르면, 우리는 어떤 구성을 만들 필요가 없습니다.- /etc/nginx/sites-enabled/
이것은 오래된 관행이었고 지금은 폐기되었습니다.
따라서 INCLUDE 지시문이 필요하지 않습니다 include /etc/nginx/sites-available/some_file.conf;
.
Nginx CookBook 페이지에서 인용-5.
“일부 패키지 리포지토리에서이 폴더의 이름은 sites-enabled이고 구성 파일은 site-available 폴더에서 연결됩니다.이 규칙은 더 이상 사용되지 않습니다.”
답변
구성에서 가져온 파일 내부에 오타가있을 수 있습니다. 예를 들어, 구성 파일 내부에 오타를 만들었습니다.
loccation /sense/movies/ {
mp4;
}
(위치 대신 위치), 이로 인해 오류가 발생합니다.
nginx: [emerg] "server" directive is not allowed here in /etc/nginx/sites-enabled/xxx.xx:1