ubuntu 설치 및 설정 Nginx

10298 단어 nginx
Ubuntu 컴 파일 설치 Nginx 및 관련 설정
1. 기본 적 인 컴 파일 과 설치
1. 설치 의존 항목
sudo apt-get update
sudo apt-get install build-essential zlib1g-dev libpcre3 libpcre3-dev libssl-dev libxslt1-dev libxml2-dev libgd2-xpm-dev libgeoip-dev libgoogle-perftools-dev libperl-dev libtool
sudo apt-get install openssl

2. 새 버 전 다운로드, 홈 페이지 에 다운로드 링크 복사
wget http://nginx.org/download/nginx-1.13.6.tar.gz

3. 스트레스 해소
tar -zxvf nginx-1.13.6.tar.gz

4. 컴 파일 설치
#       :
cd nginx-1.13.6
#   :          
./configure --prefix=/usr/local/nginx --with-http_ssl_module --with-stream --with-mail=dynamic

#   nginx:
sudo make
#   nginx:
sudo make install
#   nginx:
sudo /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
#  :-c          ,    ,nginx              ,     -h      。

#   nginx  :
ps -ef|grep nginx

#      (  /usr/local/bin   $PATH  ,                ,                nginx  )
sudo ln -s /opt/dotnet/dotnet /usr/local/bin #(    )

 컴 파일 옵션 설명:
-- prefix = path 컴 파일 된 설치 위 치 를 지정 하지 않 으 면 기본 위치 / usr / local / nginx 디 렉 터 리 -- sbin - path = path 는 nginx 실행 스 크 립 트 의 위 치 를 설정 합 니 다. path 변수 에 설정 하면 bash 환경 에서 nginx 명령 을 임의로 사용 할 수 있 습 니 다. 기본 위치 prefix / sbin / nginx  이 prefix 는 설정 파일 에 설 정 된 경로 인 conf - path = path 설정 nginx 설정 파일 의 경로 입 니 다. 이 옵션 을 지정 하지 않 으 면 설정 파일 의 기본 경 로 는 prefix / conf / nginx. conf -- pid - path = path 설정 nginx. pid 파일 의 경로 입 니 다. 일반적으로 프로 세 스 가 실 행 될 때 프로 세 스 id 가 있 습 니 다.이 id 는 pid file 에 저 장 됩 니 다. 기본 pid file 의 배치 위 치 는 prefix / logs / nginx. pid -- error - log - path = path 입 니 다. 잘못된 로그 의 저장 경 로 를 설정 하지 않 으 면 기본 prefix / logs / error. log -- http - log - path = path 는 http 접근 로그 의 경 로 를 설정 합 니 다. 지정 하지 않 으 면,기본 prefix / logs / access. log -- user = name 에 기본 시작 프로 세 스 를 설정 한 사용자 입 니 다. 지정 하지 않 으 면 기본 nobody -- group = name 에 이 사용자 가 있 는 사용자 그룹 을 설정 합 니 다. 지정 하지 않 으 면 nobody -- with - http 입 니 다.ssl_module 은 NGINX 가 HTTPS 요청 을 지원 할 수 있 도록 HTTP SSL 모듈 을 엽 니 다.OPENSSL 을 설치 해 야 돼 요.   --with-http_flv_module   --with-http_stub_status_module "server status" 페이지 사용 하기  --without-http_gzip_module 에서 ngx 사용 하지 않 기http_gzip_module. 사용 하려 면 zlib 가 필요 합 니 다.  --without-http_ssi_module 에서 ngx 사용 하지 않 기http_ssi_module   --without-http_referer_module 에서 ngx 사용 하지 않 기http_referer_module   --without-http_rewrite_module 에서 ngx 사용 하지 않 기http_rewrite_module. 사용 하려 면 PCRE 가 필요 합 니 다.   --without-http_proxy_module 에서 ngx 사용 하지 않 기http_proxy_module   --without-http_fastcgi_module 에서 ngx 사용 하지 않 기http_fastcgi_module   --without-http_memcached_module 에서 ngx 사용 하지 않 기http_memcached_module   --without-http_browser_module 에서 ngx 사용 하지 않 기http_browser_module   --http - proxy - temp - path = PATH 는 http 프 록 시 임시 파일 로 경 로 를 설정 합 니 다.   --http - fastcgi - temp - path = PATH 설정 경 로 를 http fastcgi 임시 파일 로 설정 합 니 다.   --without - http 에서 HTTP server 사용 하지 않 기  --with - mail IMAP 4 / POP 3 / SMTP 프 록 시 모듈 사용   --with-mail_ssl_모듈 사용 ngxmail_ssl_module   --with - openssl = DIR OpenSSL library sources 로 경 로 를 설정 합 니 다.   --with - stream 은 4 층 프로 토 콜 의 퍼 가기, 대리 또는 부하 균형 등 을 실현 하 는 데 사용 된다.
2. ssl 의 관련 설정
1. 자신 이 생 성 한 인증 서 를 사용 합 니 다 (테스트 또는 암호 화 데이터 만 사용 하고 주류 브 라 우 저 에 의 해 지원 되 지 않 습 니 다) 
#        (        ,       )  RSA  
sudo openssl genrsa -des3 -out testcert.key 1024  
#            
#         ,  ,  ,email。
#         common name,           。    https  (          , CA  ),         ,          。   csr    CA             
sudo openssl req -new -key testcert.key -out testcert.csr
#         key
sudo openssl rsa -in testcert.key -out testcert_nopwd.key  
#   crt  
sudo openssl x509 -req -days 365 -in testcert.csr -signkey testcert_nopwd.key -out testcert.crt  

이후 testcertnopwd. key, testcert. csr, testcert. crt 파일 복사 /etc/ssl/certs 목록 아래
그리고 설정 nginx.conf 문건
컴 파일 에 설 정 된 경 로 는 / usr / local / nginx 이기 때문에 이 파일 은 / usr / local / nginx / conf 디 렉 터 리 에 있 습 니 다.변경 파일 을 열 고 http 모듈 에서 다음 과 같이 설정 합 니 다.  ssl_certificate /etc/ssl/certs/testcert.crt; ssl_certificate_key /etc/ssl/certs/testcert.key;
 구체 적 인 코드:
http {
    include       proxy.conf;
    include       mime.types;
    default_type  application/octet-stream;  

    limit_req_zone $binary_remote_addr zone=one:10m rate=5r/s;
    server_tokens off;
    
    sendfile        on;
    #tcp_nopush     on;
   
    keepalive_timeout  29;
    client_body_timeout 10; 
    client_header_timeout 10; 
    send_timeout 10;
    #gzip  on;

    # mvctest     ,        
    upstream mvctest{
        server localhost:5000;
    }

    server {
       
        listen       80;
        add_header Strict-Transport-Security max-age=15768000;
        return 301 https://$host$request_uri;
    }

    server {
        listen *:443    ssl;
        server_name     localhost;
        ssl_certificate /etc/ssl/certs/testcert.crt;
        ssl_certificate_key /etc/ssl/certs/testcert.key;
        ssl_protocols TLSv1.1 TLSv1.2;
        ssl_prefer_server_ciphers on;
        ssl_ciphers "EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH";
        ssl_ecdh_curve secp384r1;
        ssl_session_cache shared:SSL:10m;
        ssl_session_tickets off;
        ssl_stapling on; #ensure your cert is capable
        ssl_stapling_verify on; #ensure your cert is capable

        add_header Strict-Transport-Security "max-age=63072000; includeSubdomains; preload";
        add_header X-Frame-Options SAMEORIGIN;
        add_header X-Content-Type-Options nosniff;

        #Redirects all traffic
        location / {
            proxy_pass  http://localhost:5000;
            limit_req   zone=one burst=10 nodelay;
            limit_req_status 503;
        }
    }

}

위 에서 정의 한 영역 이름 은 one (zone = one) 이 고 분배 메모리 크기 는 10m (제한 영역의 저장 공간 이 다 소모 되면 후속 모든 요청 에 대해 서버 는 503 을 되 돌려 줍 니 다) 입 니 다. 같은 ip ($binary remote addr) 의 평균 처리 요청 주파 수 는 초당 5 회 (rate = 5r / s) 를 초과 할 수 없습니다.초당 5 회 를 초과 하지만 초과 한 요청 수량 이 10 (burst = 10) 보다 적 으 면 요청 이 지연 된다.초당 5 회 이상 요청 수가 10 을 초과 하면 클 라 이언 트 에 게 503 (limit req status 503) 을 즉시 되 돌려 줍 니 다.
2. 신청 증서 상용 무료 증서:https://letsencrypt.org/ 일반적으로 CSR 파일 (생 성 방식 이 같 거나 CA 의 요구 에 따라) 은 SSL 인증 기관 에 제출 해 야 하 는 것 입 니 다. 도 메 인 이나 조직 이 검증 을 통과 하면 인증 기관 은 두 개의 파일 을 발급 합 니 다. testcom. crt 와 testcom. ca - bundle 테스트com. key 는 Nginx 설정 과 test 에 사용 해 야 합 니 다.com.crt、test_com. ca - bundle 과 함께 사용 되 므 로 잘 보관 해 야 합 니 다.
#  cat    
cat test_com.crt  test_com.ca-bundle > test_com.pem

마지막 으로 두 개의 파일 을 얻 었 습 니 다: testcom. key 와 testcom. pem, 위 치 를 통일 하기 위해 서 이 두 파일 을 모두 이동 할 수 있 습 니 다. /etc/ssl/private 디렉토리 /etc/ssl/cert 목록  그리고 nginx. conf 파일 을 수정 할 수 있 습 니 다. 다음 과 같 습 니 다.
server {  
    #...
    ssl on;
    ssl_certificate /etc/ssl/private/test_com.pem;
    ssl_certificate_key /etc/ssl/private/test_com.key;
    #...

}

자체 생 성 인증 서 를 사용 하 는 것 과 마찬가지 로 인증 기관 이 발급 한 인증서 로 재 교 체 될 뿐이다.
3. 디 피 헤 르 만 키 교환 이상 은 안전 하지 않 습 니 다. 기본 값 은 SHA - 1 형식 입 니 다. 현재 주류 방안 은 모두 SHA - 1 을 피해 야 합 니 다. 더 강 한 안전성 을 확보 하기 위해 디 피 헤 르 만 키 교환 을 사용 할 수 있 습 니 다. 먼저 / etc / ssl / certs 디 렉 터 리 에 들 어가 명령 sudo 를 실행 할 수 있 습 니 다.  openssl dhparam - out dhparam. pem 4096 dhparam. pem 생 성 
test@test-VirtualBox:/etc/ssl/certs$ sudo  openssl dhparam -out dhparam.pem 4096
[sudo] test    :
Generating DH parameters, 4096 bit long safe prime, generator 2
This is going to take a long time
# ...      ,       ...
#            
test@test-VirtualBox:~$ cd /etc/ssl/certs/
test@test-VirtualBox:/etc/ssl/certs$ ll dhparam.pem 
-rw-r--r-- 1 root root 769 9   27 11:49 dhparam.pem

수정 하 다. nginx.conf 파일 ssl_dhparam /etc/ssl/certs/dhparam.pem; ... 하면 된다
ssl_prefer_server_ciphers on;
ssl_dhparam /etc/ssl/certs/dhparam.pem;
ssl_ciphers "EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH";

3. 시동 관련
1. 상용 명령
#   Nginx
/usr/local/nginx/sbin/nginx 
./sbin/nginx 
#   Nginx
./sbin/nginx -s stop 
./sbin/nginx -s quit
# -s      Nginx        。
#Nginx      
./sbin/nginx -s reload
#      
./sbin/nginx -c /usr/local/nginx/conf/nginx.conf
#-c  configuration,      
#   Nginx   
./sbin/nginx -v
#  
./sbin/nginx -h
./sbin/nginx -?

2. 컴 파일 링 설 치 를 자동 으로 시작 하려 면 스스로 설정 해 야 자동 으로 시작 할 수 있 습 니 다.
#   nginx   , /lib/systemd/system/            
vim /lib/systemd/system/nginx.service

내용 은 다음 과 같다.
[Unit]
Description=nginx - high performance web server
After=network.target remote-fs.target nss-lookup.target

[Service]
Type=forking
ExecStart=/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
ExecReload=/usr/local/nginx/sbin/nginx -s reload
ExecStop=/usr/local/nginx/sbin/nginx -s stop

[Install]
WantedBy=multi-user.target

파일 설명 [Unit] 부분 설명: 서비스 설명 After: 의존, 의존 하 는 서비스 가 시 작 된 후에 사용자 정의 서 비 스 를 시작 합 니 다.
[Service] 부분 Type = forking 은 백 엔 드 에서 실행 되 는 형식 입 니 다. ExecStart 는 서비스의 구체 적 인 실행 명령 (경로 에 따라 어 울 려 야 함) ExecReload 를 재 부팅 명령 (경로 에 따라 어 울 려 야 함) ExecStop 을 정지 명령 (경로 에 따라 어 울 려 야 함) 으로 합 니 다. PrivateTmp = True 는 서비스 에 독립 된 임시 공간 을 할당 합 니 다. 주의: 시작, 재 부팅, 정지 명령 은 모두 절대 경 로 를 사용 해 야 합 니 다.
[Install] 일부 서비스 설치 에 관 한 설정 은 다 중 사용자 로 설정 할 수 있 습 니 다.
#        ,       
systemctl enable nginx.service
#   nginx  
systemctl start nginx.service
#         
systemctl enable nginx.service
#         
systemctl disable nginx.service
#     
systemctl status nginx.service
#     
systemctl restart nginx.service
#       
systemctl list-units --type=service

4. 발생 할 수 있 는 문제 nginx: [emerg] SSLCTX_use_PrivateKey_file ("/ etc / ssl / certs / testcert. key") failed (SSL: error: 0906406 D: PEM routines:... nginx 가 시 작 될 때 인증서 암 호 를 입력 해 야 합 니 다. 해결 방법 은 비밀 키 를 사용 하여 복호화 후의 key 를 생 성 할 수 있 습 니 다. 효 과 는 같 습 니 다. (ssh 와 연결 차이 가 많 지 않 습 니 다)비밀번호 재 부팅 면제 효과: openssl rsa - in testcert. key - out untestcert. key 다음 nginx 에서 새로운 untestcert. key 를 사용 하면 https 로 연결 할 수 있 습 니 다.
nginx: [emerg] zero size shared memory zone "oneip" 에서 이 오류 가 발생 한 것 은 모두 limit req zone 이 지정 되 지 않 았 을 때 limit req 명령 을 사 용 했 기 때 문 입 니 다 (또는 limit req 의 name 값 과 limit req zone 에서 정의 한 name 값 이 일치 하지 않 기 때 문 입 니 다).

좋은 웹페이지 즐겨찾기