it-swarm-vi.tech

Thực hành tốt nhất của NGinx

Những thực hành tốt nhất nào bạn sử dụng trong khi sử dụng NGinx?

46
The Pixel Developer

Cho đến nay, những lời khuyên tốt nhất tôi từng thấy là từ tác giả trên trang cạm bẫy của nó: https://www.nginx.com/resource/wiki/start/topic/guide/config_pit thác /

21
Roger

Cách kết hợp các khối HTTP và HTTPS.

server {
    listen 80;
    listen 443 default ssl;

    # other directives
}

Điều này đã được đăng như là một câu trả lời cho một câu hỏi khác nhau. Xem tại đây .

21
Jauder Ho

Nói chung, sử dụng "nếu" là một thực hành xấu (theo tác giả của nginx). nếu có thể, tốt hơn là sử dụng lệnh try_file của error_page thay vì "if (-f ...)"

Kết hợp mẹo với tệp duy trì.html và mẹo với try_files chúng tôi nhận được:

[.___] vị trí/{[.___

Khi bảo trì kết thúc, chỉ cần bảo trì mv.html từ $ root.

15
Slava K

Định cấu hình nginx để sử dụng mật mã SSL mạnh hơn. Theo mặc định, SSLv2 được bật (bạn nên tắt nếu có thể).

ssl_ciphers DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA:EDH-RSA-DES-CBC3-SHA:AES256-SHA:DES-CBC3-SHA:AES128-SHA:RC4-SHA:RC4-MD5;

http://tumblelog.jauderho.com/post/121851623/nginx-and-stronger-ssl

11
Jauder Ho

Nó thường hiệu quả hơn khi sử dụng lệnh map thay cho các biểu thức thông thường khi chuyển đổi gốc cho các tên miền phụ phù hợp:

server {

    server_name mysite.tld ~^.+\.mysite\.tld$;

    map $Host $files {
        default            common;
        mysite.tld         common;
        www.mysite.tld     common;
        admin.mysite.tld   admin;
        system.mysite.tld  system;
        *.mysite.tld       users;
    }

    root /var/www/mysite/$files;

}
8
Phillip B Oldham

Các empty_gif mô-đun cũng rất hữu ích, đặc biệt nếu bạn cần phản hồi màn hình từ máy chủ web (sử dụng nagios/monit/etc):

location /token {
    empty_gif;
}

location /favicon.ico {
    empty_gif;
}

location /img/1px.gif {
    empty_gif;
} 
8
Phillip B Oldham

Chúng tôi đã thiết lập Nginx với Chef, sử dụng sách dạy nấu ăn này chứa các tập lệnh để xử lý cấu hình nginx tương tự như cách Debian làm Apache2 và một số mẫu mẫu có mặc định lành mạnh.

6
jtimberman

Đây là một phương pháp tốt để trả về một trang bảo trì. Tất cả các yêu cầu được viết lại và mã http chính xác được trả về. (Lỗi 503: Dịch vụ không khả dụng)

error_page 503 /maintenance.html;

location /
{
    if (-f $document_root/maintenance.html)
    {
        return 503;
    }

    try_files $uri /index.php?$args;
}

location = /maintenance.html
{
    rewrite ^ /maintenance.html break;
}
5
The Pixel Developer

Từ nginx 0.7.12 trở lên, "" có thể sử dụng được trong server_name để bắt các yêu cầu mà không cần tiêu đề "Máy chủ".

Bạn có thể sử dụng các mục sau đây như một lưu ý cho các máy chủ ảo không xác định.

server {
  server_name _ "";
}
4
Unknown

Tôi cũng đã đăng cách đây một chút về cách xử lý nén gzip đúng cách với nginx vì các trình duyệt cũ hơn có thể có vấn đề chỉ với một câu lệnh gzip. HTH.

http://tumblelog.jauderho.com/post/27655495/gzip-compression-with-nginx

3
Jauder Ho

Tôi không biết nếu đó là một thực tiễn tốt nhất, nhưng chắc chắn là một bản hack gọn gàng để có được các điều kiện lồng nhau trong nginx. Đây là một mẫu từ nginx wiki .

location /xxxx/ {
  set $test "";

  if ($request_method = POST) {
    set $test  P;
  }

  if ($http_cookie ~* "CCCC=.+(?:;|$)" ) {
    set $test  "${test}C";
  }

  if ($test = PC) {
    #rewrite rule goes here.
  } 
}
3
sajal

Nếu bạn cần lật theo ngữ cảnh giữa http và https cho các tên miền phụ được xử lý bởi cùng một khối máy chủ, bạn có thể sử dụng các biến để làm như vậy. Có thể không phải là cách hiệu quả nhất để làm mọi thứ, nhưng nó hoạt động:

server {
  server mysite.tld ~^.+\.mysite\.tld$;

  set $req_ssl = 0;

  map $Host $files {
      default            common;
      mysite.tld         common;
      www.mysite.tld     common;
      admin.mysite.tld   admin;
      system.mysite.tld  system;
      *.mysite.tld       users;
  }

  root /var/www/mysite/$files;

  if ( $files = "admin" ){
    set $req_ssl 1;
  }

  if ( $files = "common" ){
    set $req_ssl 2;
  }

  if ( $scheme = http )
  {
    set $req_ssl $req_ssl.1;
  }

  if ( $scheme = https )
  {
    set $req_ssl $req_ssl.2;
  }

  if ($req_ssl = 1.1){
    rewrite ^ https://$Host$uri;
  }

  if ($req_ssl = 2.2){
    rewrite ^ http://$Host$uri;
  }

}
2
Phillip B Oldham

Tôi luôn cố gắng sử dụng lệnh root ở đầu khối máy chủ để tôi có thể tận dụng $document_root biến và không bao giờ, nhưng không bao giờ, bao gồm lệnh root bên trong khối vị trí.

Trang cạm bẫy từ wiki Nginx có một số lời khuyên tuyệt vời về thực tiễn tốt nhất.

Nếu bạn đang sử dụng nginx làm proxy, việc điều chỉnh cài đặt thời gian chờ có thể rất quan trọng để đảm bảo bạn không bị mất kết nối nginx trước khi ứng dụng của bạn được thực hiện với chúng, đặc biệt nếu bạn đang xử lý một ứng dụng lưu lượng truy cập cao:

proxy_connect_timeout
proxy_send_timeout
1
wjimenez5271
0
KPWINC