Nginx 입문 (1) Nginx 웹 서버 설정
머리말
Nginx 는 고성능 웹 과 역방향 프 록 시 서버 로 인터넷 회사 에서 광범 위 하 게 응용 된다.갓 입사 한 샤 오 백 은 9 월 말 에 회사 사이트 의 HTTPS 개 조 를 겪 었 습 니 다. nginx 를 직접 배치 하지 않 았 지만 처음에 Nginx 설정 을 보 았 을 때 어 리 석 었 습 니 다. (왜 본과 학 교 는 전문 적 으로 배우 지 않 았 습 니까?% >
Nginx 설치
먼저 Nginx 의 다양한 시스템 에서 의 설 치 를 소개 합 니 다.
# CentOS
yum install nginx;
# Ubuntu
sudo apt-get install nginx;
# Mac
brew install nginx;
본 고 는 주로 Mac 에서 설 치 된 것 을 예 로 들 수 있 습 니 다. homebrew 를 통 해 nginx 는 기본적으로
/usr/local/Cellar/nginx/
디 렉 터 리 에 설치 되 어 있 습 니 다. conf 설치 디 렉 터 리 는 /usr/local/etc/nginx/nginx.conf
시작, 열 재 부팅, 닫 기 및 테스트 설정 명령 이 다음 과 같 습 니 다.#
nginx -s start;
# , ,
nginx -s reload;
#
nginx -s stop;
# ,
nginx -t;
브 라 우 저 에 입력http://localhost:8080nginx 의 환영 인터페이스 에 접근 할 수 있 습 니 다. 그렇다면 왜 nginx 의 환영 인터페이스 에 접근 하 였 습 니까? nginx. conf 를 열 어 이 파일 을 분석 해 보 세 요. nginx 설정 에서
#
설명 을 표시 합 니 다.#user nobody;
## Nginx Linux
worker_processes 1;
## 。 CPU
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
## Nginx
#pid logs/nginx.pid;
##Nginx ID(PID)
events {
worker_connections 1024;
## worker_connections worker_processes maxclients。
##max_clients = worker_processes * worker_connections
}
http {
include mime.types;
## /opt/nginx/conf/mime.types http
default_type application/octet-stream;
#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;
sendfile on;
## ,sendfile , , 。
#tcp_nopush on;
## nginx ,tcp_nopush tcp_nodelay " "。 。 , 0.2 , 。 nginx ,tcp_nopush sendfile 。
#keepalive_timeout 0;
keepalive_timeout 65;
##
#gzip on;
## gzip
server {
## , server , include
listen 8080;
## Nginx TCP , HTTP 。listen 80; listen *:80;
server_name localhost;
##
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
##location nginx
root html;
index index.html index.htm;
}
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
# proxy the PHP scripts to Apache listening on 127.0.0.1:80
#
#location ~ \.php$ {
# proxy_pass http://127.0.0.1;
#}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
#location ~ \.php$ {
# root html;
# fastcgi_pass 127.0.0.1:9000;
# fastcgi_index index.php;
# fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
# include fastcgi_params;
#}
# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
#location ~ /\.ht {
# deny all;
#}
}
# another virtual host using mix of IP-, name-, and port-based configuration
#
#server {
# listen 8000;
# listen somename:8080;
# server_name somename alias another.alias;
# location / {
# root html;
# index index.html index.htm;
# }
#}
# HTTPS server
#
#server {
# listen 443 ssl;
# server_name localhost;
# ssl_certificate cert.pem;
# ssl_certificate_key cert.key;
# ssl_session_cache shared:SSL:1m;
# ssl_session_timeout 5m;
# ssl_ciphers HIGH:!aNULL:!MD5;
# ssl_prefer_server_ciphers on;
# location / {
# root html;
# index index.html index.htm;
# }
#}
include servers/*;
}
위의 기본 설정 은 매우 많 지만 전체적으로 세 개의 모듈 로 요약 할 수 있 습 니 다.
#
events {
#events
}
http
{
#http
server
{
#server
location [PATTERN]{
#location
}
}
}
1. 전역 블록: nginx 전역 에 영향 을 주 는 명령 을 설정 합 니 다. 일반적으로 nginx 서버 를 실행 하 는 사용자 그룹, nginx 프로 세 스 pid 저장 경로, 로그 저장 경로, 프로필 도입, worker process 수 생 성 등 이 있 습 니 다.
2. 이벤트 블록: nginx 서버 나 사용자 와 의 네트워크 연결 에 영향 을 주 는 설정 을 설정 합 니 다. 각 프로 세 스 의 최대 연결 수가 있 습 니 다. 어떤 이벤트 구동 모델 을 선택 하여 연결 요청 을 처리 할 지, 여러 네트워크 연결 을 동시에 받 아들 일 수 있 는 지, 여러 네트워크 연결 직렬 화 를 시작 할 수 있 는 지 등 이 있 습 니 다.
3. http 블록: 여러 개의 server, 프 록 시, 캐 시, 로그 정의 등 절대 다수의 기능 과 제3자 모듈 의 설정 을 포함 할 수 있 습 니 다. 예 를 들 어 파일 도입, mime - type 정의, 로그 사용자 정의, sendfile 전송 파일 사용 여부, 연결 시간 초과, 단일 연결 요청 수 등 입 니 다.
4. server 블록: 가상 호스트 의 관련 매개 변 수 를 설정 합 니 다. http 에 여러 개의 server 가 있 을 수 있 습 니 다.
5. location 블록: 요청 한 경로 와 각종 페이지 의 처리 상황 을 설정 합 니 다.
Nginx 웹 서버 설정
먼저 웹 서 비 스 를 간단하게 설정 한 다음 에 각 중요 한 점 에 대해 간단하게 설명 합 니 다. 이 사례 에서 역방향 대리 에 관 한 요점 은 다음 편 에서 소개 합 니 다.
기록 하 다
########### 。#################
#user administrator administrators; # , nobody nobody。
#worker_processes 2; # , 1
#pid /nginx/pid/nginx.pid; # nginx
error_log log/error.log debug; # , 。 ,http ,server , :debug|info|notice|warn|error|crit|alert|emerg
events {
accept_mutex on; # , , on
multi_accept on; # , off
#use epoll; # ,select|poll|kqueue|epoll|resig|/dev/poll|eventport
worker_connections 1024; # , 512
}
http {
include mime.types; #
default_type application/octet-stream; # , text/plain
#access_log off; #
log_format myFormat '$remote_addr–$remote_user [$time_local] $request $status $body_bytes_sent $http_referer $http_user_agent $http_x_forwarded_for'; #
access_log log/access.log myFormat; #combined
sendfile on; # sendfile , off, http ,server ,location 。
sendfile_max_chunk 100k; # , 0, 。
keepalive_timeout 65; # , 75s, http,server,location 。
upstream mysvr {
server 127.0.0.1:7878;
server 192.168.10.121:3333 backup; #
}
error_page 404 https://www.baidu.com; #
server {
keepalive_requests 120; # 。
listen 4545; #
server_name 127.0.0.1; #
location ~*^.+$ { # url , ,~ ,~* 。
#root path; #
#index vv.txt; #
proxy_pass http://mysvr; # mysvr
deny 127.0.0.1; # ip
allow 172.18.5.54; # ip
}
}
}
도 메 인 이름과 포트 설정
상기 예 에서
listen 4545; #
감청 포트 는 4545 라 고 밝 혔 다. 그러나 한 소 백 에 게 는 가끔 listen [::]:80;
, listen :80;
, listen *:80;
이 세 가지 글 씨 를 보면 어 리 석 을 때 가 있다. 그렇다면 그들 사이 에는 어떤 차이 가 있 을 까?listen [::]:80;
Nginx 는 IPv 4 와 IPv 6 의 80 포트 를 동시에 감청 할 것 이 라 고 밝 혔 다. listen :80;
이 두 가지 표기 법 은 같다.위치 에서 URL 일치
상기 예 에서 location 뒤에 따 르 는 정규 가 일치 하 는 것 을 발 견 했 습 니 다. 사실은 nginx 에서 location url 매 칭 은 일정한 우선 순 위 를 따 릅 니 다.
location = / {
# =
# ~
# ~*
}
location ^~ /images/ {
# ^~
# /images/ , , , 。
}
location ~* \.(gif|jpg|jpeg)$ {
# ~* ,
# ~ ,
# gif,jpg jpeg
}
location / {
# ,
}
location 의 우선 순 위 는 다음 과 같 습 니 다.
(location =) > (location 전체 경로) > (location ^ ~ 경로) > (location, * 정규 순서) > (location 부분 시작 경로) > (/)
location = / {
#
[ configuration A ]
}
location / {
# / 。 , 。 , 。
[ configuration B ]
}
location /documents/ {
# /documents/ 。 , 。
# , 。
[ configuration C ]
}
location ^~ /images/ {
# /images/ , , 。 , location,
#
[ configuration D ]
}
location ~* \.(gif|jpg|jpeg)$ {
# gif jpg jpeg 。 /images/ , Configuration D
[ configuration E ]
}
파일 경로 정의
location 모듈 에서 루트 디 렉 터 리 설정 과 같은 파일 경 로 를 정의 할 수 있 습 니 다.
location / {
root /home/barret/test/;
}
홈 페이지 설정:
index /html/index.html /php/index.php;
try files 설정 try file 은 파일 이 존재 하 는 지 확인 하고 찾 은 첫 번 째 파일 을 사용 하여 되 돌려 주 는 기능 입 니 다. 찾 은 파일 이 하나 도 없 으 면 마지막 매개 변수 가 지정 한 URI 로 다시 설정 합 니 다. 예:
location /images/ {
try_files $uri /images/default.gif;
}
location = /images/default.gif {
expires 30s;
}
ps: $uri 는 요청 인자 가 없 는 현재 URI 입 니 다. 다음 전역 변수 에서 설명 합 니 다. 마지막 인자 도 이름 을 가 진 location 일 수 있 습 니 다. 다음 과 같 습 니 다.
try_files $uri $uri.html $uri/index.html @other;
location @other {
# uri ,
proxy_pass http://localhost:9000;
}
location / {
# uri , 502
try_files $uri $uri.html =502;
}
Rewrite 리 셋
하면, 만약, 만약...http://www.jianshu.com/users/10001 다시 쓴다http://www.jianshu.com/show?user=10001, rewrite 규칙 을 사용 할 수 있 습 니 다. 아래 코드 를 참조 하 십시오. 저 는 회사 사이트 의 개조 과정 에서 rewrite 를 만 났 습 니 다. URL 을 다시 쓰 는 목적 은 더 좋 은 SEO 를 위 한 것 입 니 다.
location /users/ {
rewrite ^/users/(.*)$ /show?user=$1 break;
}
rewrite 기능 은 nginx 가 제공 하 는 전역 변수 나 자신 이 설정 한 변 수 를 사용 하여 정규 표현 식 과 표지 위 치 를 결합 하여 url 재 작성 과 재 설정 을 실현 하 는 것 입 니 다.
rewrite 규칙 방향 경로 재 작성 형식;
1. 규칙: 일치 하 는 대상 url 2, 방향 지정 경 로 를 문자열 이나 정규 로 표시 할 수 있 습 니 다. 규칙 에 일치 하 는 경 로 를 표시 합 니 다. 규칙 에 정규 가 있 으 면 $index 를 사용 하여 정규 캡 처 그룹 3, 재 작성 형식 을 표시 할 수 있 습 니 다. last: Apache 리드 (L) 에 해당 합 니 다.태그, rewrite 완료, 브 라 우 저 주소 표시 줄 URL 주 소 는 break 변 하지 않 습 니 다. 이 규칙 은 일치 가 완료 되면 일치 하지 않 습 니 다. 다음 규칙 과 일치 하지 않 습 니 다. 브 라 우 저 주소 표시 줄 URL 주 소 는 redirect 변 하지 않 습 니 다. 302 임시 방향 으로 돌아 가면 브 라 우 저 주 소 는 점프 후의 URL 주 소 를 표시 합 니 다 permanent: 301 영구 방향 으로 돌아 갑 니 다. 브 라 우 저 주소 표시 줄 은 점프 후의 URL 을 표시 합 니 다.주소.
break 와 last 의 차이
server {
location / {
rewrite /last/ /q.html last;
rewrite /break/ /q.html break;
}
location = /q.html {
return 400;
}
}
위의 간단 한 재 작성 은 수 요 를 만족 시 키 지 못 할 때 가 많 습 니 다. 예 를 들 어 파일 이 존재 하지 않 을 때, 경로 가 xx 를 포함 할 때 등 조건 을 판단 해 야 할 때 if 의 문법 은 다음 과 같 습 니 다.
if ( ) {
}
내 장 된 전역 변수:
$args : , $query_string
$content_length : Content-length 。
$content_type : Content-Type 。
$document_root : root 。
$host : , 。
$http_user_agent : agent
$http_cookie : cookie
$limit_rate : 。
$request_method : , GET POST。
$remote_addr : IP 。
$remote_port : 。
$remote_user : Auth Basic Module 。
$request_filename : , root alias URI 。
$scheme : HTTP ( http,https)。
$server_protocol : , HTTP/1.0 HTTP/1.1。
$server_addr : , 。
$server_name : 。
$server_port : 。
$request_uri : URI, , :”/foo/bar.php?arg=baz”。
$uri : URI,$uri , ”/foo/bar.html”。
$document_uri : $uri 。
내 장 된 조건 판단:
- f 와! - f 는 파일 이 존재 하 는 지 여 부 를 판단 하 는 데 사 용 됩 니 다. - d 와! - e 는 파일 이나 디 렉 터 리 가 존재 하 는 지 여 부 를 판단 하 는 데 사 용 됩 니 다. - x 와! - x 는 파일 이 실행 가능 한 지 여 부 를 판단 하 는 데 사 용 됩 니 다.
설정 파일 에서 볼 때 가 있 습 니 다
listen *:80;
. 그 와 $http_host
는 어떤 차이 가 있 습 니까?$host
와 $http_host
모두 원시 적 인 'HOST' 필드 입 니 다. 예 를 들 어 요청 할 때 HOST 의 값 은 $host
이 고 반 대 된 후에 도 www.csdn.net
클 라 이언 트 가 보 낸 요청 의 header 에 'HOST' 라 는 필드 가 없 을 때 www.csdn.net
를 사용 하 는 것 을 권장 합 니 다. 이때 $host
는 $host
와 같 습 니 다.if 표현 식 예:
# 400
if (!-f $request_filename) {
return 400;
}
# host xuexb.com, 301 xuexb.com
if ( $host != 'xuexb.com' ){
rewrite ^/(.*)$ https://xuexb.com/$1 permanent;
}
# POST 405
if ($request_method = POST) {
return 405;
}
# a=1 301
if ($args ~ a=1) {
rewrite ^ http://example.com/ permanent;
}
if 는 보통 location 규칙 과 조합 하여 사용 합 니 다. 예 를 들 어:
# /test.html
location = /test.html {
# xiaowu
set $name xiaowu;
# name=xx
if ($args ~* name=(\w+?)(&|$)) {
set $name $1;
}
# 301
rewrite ^ /$name.html permanent;
}
위 에 표시:
본 고 는 주로 다음 과 같은 이 문헌 을 참고 한다.http://www.linuxeye.com/configuration/2657.html
읽 어 주 셔 서 감사합니다. 다음 글 은 Nginx 의 역방향 프 록 시 설정 을 소개 합 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.