Những thực hành tốt nhất nào bạn sử dụng trong khi sử dụng NGinx?
Những thực hành tốt nhất nào bạn sử dụng trong khi sử dụng NGinx?
Câu trả lời:
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 .
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/topics/tutorials/config_pit thác /
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 notifyenence.html và mẹo với try_files chúng tôi nhận được:
vị trí / { try_files /maintenance.html $ uri $ uri / @wordpress; }
Khi bảo trì kết thúc, chỉ cần bảo trì mv.html từ $ root.
if (-f ...) { return 503; }
và error_page 503 /maintenance.html
. Bạn nghĩ sao?
Đị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
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;
}
Các empty_gif
mô-đun cũng là rất hữu ích, đặc biệt là nếu bạn cần giám sát phản hồi 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;
}
access_log off;
đối với những địa điểm này là thông lệ
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.
Đâ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ả lại. (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;
}
if
tuyên bố nếu bạn sử dụng đúng - tài liệu nói rằng if
nó an toàn nếu bạn 'tái chỉ làm return xxx;
.
location = /maintenance.html { break; }
cần thiết?
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 _ "";
}
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
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ừ wiki nginx .
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.
}
}
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;
}
}
Tôi luôn cố gắng sử dụng lệnh root
trong đầ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
trong khối vị trí.
Các cạm bẫy Trang từ Nginx wiki có một số lời khuyên tuyệt vời về thực hành 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
Bạn đã xem qua đây?