Nginx 설정 정보 및 가상 호스트 생 성
Nginx 프로필 은 주로 4 부분 으로 나 뉜 다. main (전역 설정) 부분 에서 설정 한 명령 은 다른 모든 설정 에 영향 을 줄 것 이다.server (호스트 설정) 부분의 명령 은 주로 호스트 와 포트 를 지정 하 는 데 사 용 됩 니 다.upstream (부하 균형 서버 설정) 부분 명령 은 주로 부하 균형 에 사용 되 고 일련의 백 엔 드 서버 를 설정 합 니 다.location (URL 이 특정 위치 와 일치 하 는 설정) 부분 은 웹 페이지 위치 와 일치 합 니 다.4 자 간 의 관계: server 계승 main, location 계승 server, upstream 은 다른 설정 도 계승 하지 않 고 계승 되 지 않 습 니 다.
# Nginx Worker , nobody 。 Nginx ,
user www www;
# Nginx , 10~12M 。 CPU 。
# cpu cat /proc/cpuinfo | grep flags | grep ' lm ' | wc -l cat /proc/cpuinfo | grep name | cut -f2 -d: | uniq -c
worker_processes 1;
# , :debug、info、notice、warn、error、crit
error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
# id
pid logs/nginx.pid;
# TCMalloc ,
google_perftools_profiles /tmp/tcmalloc;
# worker CPU, Linux , 65535 Linux ulimit -HSn 65535
worker_rlimit_nofile 65535;
events {
# Nginx , select、poll、kqueue、epool、rtsig /dev/poll。 select poll
# kqueue epoll , linux , BSD 。
use epoll;
# , 1024, Linux , ulimit
# , max_client=worker_processes*worker_connections, 4。
worker_connections 65535;
}
http {
# , Apache include
include mime.types;
# ,
default_type application/octet-stream;
# , main , access_log
#log_format main '$remote_addr - $remote_user [$time_local] "$request" '
# '$status $body_bytes_sent "$http_referer" '
# '"$http_user_agent" "$http_x_forwarded_for"';
#access_log logs/access.log main;
#
server_names_hash_bucket_size 128;
client_header_buffer_size 32k;
large_client_header_buffers 4 32k;
#
client_max_body_size 600m;
# , tcp_nopush tcp_nodelay on
sendfile on;
tcp_nopush on;
tcp_nodelay on;
# nginx ,
server_tokens off;
# , , 75s
#keepalive_timeout 0;
keepalive_timeout 65;
# , , 60s
#send_timeout 60;
# FastCGI
# FastCGI
fastcgi_connect_timeout 300;
# FastCGI
fastcgi_send_timeout 300;
# FastCGI
fastcgi_read_timeout 300;
# FastCGI
fastcgi_buffer_size 64k;
fastcgi_buffers 4 64k;
# fastcgi_buffers
fastcgi_busy_buffers_size 128k;
# , fastcgi_buffers
fastcgi_temp_file_write_size 128k;
# FastCGI 、 、
#fastcgi_cache_path /usr/local/nginx/fastcgi_cache levels=1:2 keys_zone=TEST:10m inactive=5m;
# FastCGI 。 CPU , 502 。
# ,
#fastcgi_cache TEST;
# , 200 303 1 ,301 1 , 1 。
#fastcgi_cache_valid 200 302 1h;
#fastcgi_cache_valid 301 1d;
#fastcgi_cache_valid any 1m;
# Nginx HttpGzip , , /usr/local/nginx/sbin/nginx -V ( V)
# gzip
gzip on;
#
gzip_min_length 1k;
gzip_buffers 4 16k;
gzip_http_version 1.1;
# , 1 9, , 1
gzip_comp_level 2;
# ,text/html
gzip_types text/plain application/x-javascript text/css application/xml;
# , off
gzip_vary on;
# server , , include
# , 403
server {
listen 80 default;
server_name _;
# 404 500,
return 403;
}
# include ,
include vhosts/examples.com.conf;
include vhosts/abc.com.conf;
}
2. Nginx 가상 호스트 설정 및 PHP 지원
conf 디 렉 터 리 아래 에 vhosts 디 렉 터 리 를 만 들 고 사이트 의 프로필 을 만 듭 니 다. 여 기 는 examples. com. conf 를 예 로 들 수 있 습 니 다.
[root@localhost ~]# cd /usr/local/nginx/
[root@localhost nginx]# mkdir -p conf/vhosts
[root@localhost nginx]# vim conf/vhosts/examples.com.conf
만 든 examples. com. conf 프로필 은 다음 과 같 습 니 다.
# server
server {
# ,
listen 80;
# ip ,
server_name examples.com www.examples.com;
#
charset utf-8;
# , main
#access_log logs/examples.com.access.log main;
# , ( nginx ),
#root /www/examples.com
#
#index index.html index.php
# , root index
# , location / {}
location / {
root /www/examples.com;
index index.html index.php;
}
# error_page
# 512k ie ie
#error_page 404 /404.html;
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
# nginx location url , , 。
# location nginx 、 。
# 30
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$ {
expires 30d;
}
# js css 1
location ~ .*\.(js|css)$ {
expires 1h;
}
# php :
# php 8080
#location ~ \.php$ {
# proxy_pass http://127.0.0.1:8080;
#}
# php FastCGI ip , PHP_FPM
location ~ \.php$ {
# php ,
root /www/examples.com;
# php_fpm
fastcgi_pass 127.0.0.1:9000;
#
fastcgi_index index.php;
# php , $fastcgi_script_name , $document_root
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
# .htaccess ,
location ~ /\.ht {
deny all;
}
}
마지막 으로 사이트 의 루트 디 렉 터 리 를 만 들 고 디 렉 터 리 권한 을 설정 합 니 다.
[root@localhost ~]# mkdir -p /www/examples.com
#
[root@localhost ~]# chmod +w /www/examples.com
[root@localhost ~]# chown -R www:www /www/examples.com
# php
[root@localhost ~]# echo " phpinfo(); ?>" >> /www/examples.com/phpinfo.php
이 럴 때 php - fpm 와 nginx 를 시작 하면 직접 접근 할 수 있 을 것 같 습 니 다.http://www.examples.com/phpinfo.php됐어.
3. php - fpm 와 fastcgi 최적화params 설정 정보
PHP - FPM 설정 파일 은 / usr / local / php / etc / php - fpm. conf 에 있 습 니 다. 다음은 자주 사용 하 는 설정 항목 에 대해 설명 합 니 다.
127.0.0.1:9000
0
www www
128
0s
65535
1024
127.0.0.1
fastcgi_param 프로필 은 / usr / local / nginx / conf / fastcgi 에 있 습 니 다.params 에서 그 중의 fastcgiparam SERVER_SOFTWARE nginx/$nginx_version;중 $nginxversion 제거, nginx 버 전 숨 기기.
#fastcgi_param SERVER_SOFTWARE nginx/$nginx_version;
fastcgi_param SERVER_SOFTWARE nginx;
4. 흔히 볼 수 있 는 오류 와 해결 방법
먼저 nginx 가 시 작 된 후에 사이트 에 접근 할 수 없 거나 접근 하 는 데 오류 가 있 으 면 nginx (기본적으로 nginx 에 설 치 된 디 렉 터 리 의 logs 폴 더 아래) 나 phop - fpm (기본적으로 phop 루트 디 렉 터 리 의 logs / phop - fpm. log 파일 에 있 음) 의 로그 파일 을 먼저 봐 야 합 니 다. 자세 한 오류 정보 가 들 어 있 습 니 다.
1. php 파일 에 접근 할 때 페이지 에 'No input file specified' 알림 이 나타 나 고 정적 파일 은 정상 입 니 다.이것 은 사이트 설정 에서 php 확장 에 대한 분석 에서 fastcgiparam SCRIPT_FILENAME 뒤의 경로 에 오류 가 발생 하여 php - fpm 에서 php 파일 을 찾 을 수 없습니다. 해결 방법 은 $fastcgiscript_name 앞의 경 로 를 사이트 루트 디 렉 터 리 의 절대 경로 로 설정 하면 됩 니 다. 경 로 는 마지막 에 슬 래 쉬 /, 즉:
fastcgi_param SCRIPT_FILENAME /www/examples.com$fastcgi_script_name;
php. ini 파일 의 cgi. fix 를pathinfo 항목 은 1 로 설정 되 어 있 지만 설정 을 하지 않 은 것 도 좋 습 니 다. nginx 버 전이 다 를 것 같 습 니 다.
2. [ERROR] fpm_unix_conf_wp (), line 124: please specify user and group other than root, pool 'default' 의 오 류 는 phop - fpm. log 로그 파일 에 나타 난 것 입 니 다. phop - fpm 사용자 와 사용자 그룹 을 설정 하지 않 았 거나 phop - fpm 사용자 나 사용자 그룹 을 nginx 와 같이 수정 하지 않 았 기 때 문 입 니 다.해결 방법 은 php - fpm. conf 설정 파일 의 user 와 group 을 수정 하 는 것 입 니 다. 기본 적 인 상황 에서 이 두 설정 은 설명 되 어 있 습 니 다.
www
www
3. [error] 19075#0: *4 connect() failed (110: Connection timed out) while connecting to upstream, ......
이 오류 알림 은 nginx 가 php - fpm 로 전 송 될 때 연결 시간 이 초과 되 었 음 을 알려 주 는 것 입 니 다. 따라서 방 문 량 이 너무 많 으 면 시간 초과 설정 을 길 게 할 수 있 습 니 다.그러나 사이트 방문 이 많 지 않 거나 설정 을 시작 한 후에 이 오류 가 발생 하면 iptables 설정 에 문제 가 있 습 니 다.검증 방법 은 iptables 를 정지 (/ etc / init. d / iptables stop) 한 후 정상적으로 접근 하면 방화벽 설정 의 문제 임 을 설명 하고 방화벽 에 다음 과 같은 규칙 을 추가 하면 됩 니 다.
iptables -I INPUT 2 -i lo -p all -j ACCEPT
/etc/init.d/iptables save
/etc/init.d/iptables start
4. nginx 를 시작 할 때 나타 나 기 [emerg]: getpwnam("www") failed 잘못
이 오류 에서 getpwnam 중간 ww 는 다른 이름 일 수 있 습 니 다. 주요 원인 은 nginx 와 nginx 프로필 (nginx. conf) 에 설 치 된 사용자 와 사용자 그룹 이 존재 하지 않 기 때문에 해당 하 는 사용자 와 사용자 그룹 을 만 들 면 됩 니 다.
5. [emerg] 30558 \ # 0: setuid (500) failed (11: Resource temporary unavailable) 오류 정보 중의 setuid 중간 숫자 는 다른 숫자 입 니 다. 예 를 들 어 501, 502 등 입 니 다.이 오 류 는 한 걸음 한 걸음 조사 해 야 합 니 다. 상대 적 으로 복잡 합 니 다. 해결 방법 은 다음 과 같 습 니 다. 먼저 setuid 중간 에 있 는 숫자 에 따라 해당 하 는 사용자 가 존재 하 는 지 확인 하고 존재 하지 않 으 면 사용 자 를 만 듭 니 다.
more /etc/passwd | grep 500
# nginx , useradd
사용자 가 존재 한다 면 사용 합 니 다. ulimit -n 명령 은 서버 파일 설명자 가 얼마 인지 보고 기본 값 은 1024 이 며 사용 합 니 다. ps -U www | wc -l 명령 은 ww 사용자 가 사용 하 는 프로 세 스 의 수 를 봅 니 다. (ww 사용 자 를 자신의 것 으로 바 꾸 는 것 을 주의 하 십시오) 서버 파일 설명자 의 수 를 초과 하면 이 인 자 를 향상 시 켜 야 합 니 다. 구체 적 인 방법 은 nginx. conf 의 worker 입 니 다.rlimit_nofile、worker_connections 와 php - fpm. conf 파일 의 rlimitfiles 설정 항목 을 크게 설정 하면 65535 (최대 값) 로 직접 설정 할 수 있 습 니 다.그리고 서버 파일 설명자 의 크기 를 늘 려 야 합 니 다.두 가지 설정 방법 이 있 습 니 다.
# /etc/security/limits.conf ,
echo '* - nofile 65535' >> /etc/security/limits.conf
# ulimit -HSn 65535 , php-fpm nginx
ulimit -HSn 65535
cat >> /etc/rc.local <
"ulimit - hsn" 뒤의 숫자 와 ngix. conf 의 worker 를 확인 해 야 합 니 다.rlimit_nofile、worker_connections 와 php - fpm. conf 파일 의 rlimitfiles 설정 항목 을 같은 숫자 로 설정 합 니 다.
위 에 설 치 된 설정 을 수정 한 후에 도 오류 가 있 으 면 축하합니다. 당신 의 인품 이 크게 향상 되 었 습 니 다. 이런 경 우 는 드 물 습 니 다. 먼저 재 부팅 을 했 는 지 확인 하 십시오. 재 부팅 을 한 후에 도 "ulimit - SH n 65535" 명령 을 / etc / profile 에 추가 할 수 있 습 니 다.
echo "ulimit -SHn 65535" >> /etc/profile
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.