Nginx教程
Nginx是一种高性能的Web服务器。它最初是为解决10K问题而开发的,这意味着服务10.000个并发连接。 Nginx可以用作独立的Web服务器,也可以在其他Web服务器之前用作反向代理。
当充当反向代理时,Nginx充当前端Web服务器,它将传入的请求传递到背面,不同端口等上的Web服务器。然后,Nginx可以处理SSL / HTTPS,GZip,缓存头,负载平衡等方面还有很多其他的东西。然后,后面的Web服务器不需要知道如何处理。而且,只有一台Web服务器需要学习如何配置SSL / HTTPS,GZip等,这就是Nginx。我在码头前使用Nginx。 Nginx处理所有SSL / HTTPS内容,而Jetty只是在背面处理普通的HTTP请求。
我们可以在Nginx网站上找到Nginx:http://nginx.com
安装Nginx
我们可以使用apt-get
软件包管理器在Ubuntu上安装Nginx,如下所示:
apt-get install nginx
那应该在Ubuntu服务器上安装最新版本的Nginx。
要在其他Linux发行版上安装Nginx,请在Google,Bing等上进行搜索。我们将轻松找到在所需的Linux发行版上安装Nginx所需的命令行。
启动Nginx
一旦安装了Nginx,就需要启动它。我们可以使用以下命令执行此操作:
/etc/init.d/nginx start
要验证Nginx是否正在运行,请尝试将浏览器定向到Ubuntu服务器的IP地址(或者域名)。确保已打开端口80上的防火墙。
检查Nginx是否正在运行
检查Nginx是否正在运行的另一种方法是运行以下命令:
htop
在命令的输出中,在列表中查找" nginx主进程"和" nginx工作进程"。如果我们在列表中看到这些进程,则Nginx正在运行。
重新启动Nginx
每当我们对Nginx配置文件进行更改时,都将需要重新启动Nginx。使用以下命令完成Nginx的重启:
/etc/init.d/nginx restart
一台Nginx重新启动后,新配置将生效。
如果配置文件中有错误,则重启Nginx将失败。重新启动命令将在其输出的行末写一个小的"确定"或者"失败",让我们知道重新启动是成功还是失败。如果有错误,请更正它,然后重新启动Nginx。然后它应该再次工作。
Nginx配置文件
Nginx主配置文件位于:
/etc/nginx/nginx.conf
Nginx配置文件可能包括其他配置文件。因此,我们可以将配置分为多个较小的,可重复使用的配置文件,这些文件都包含在主Nginx配置文件中。
要配置Nginx,我们必须对Nginx配置文件进行更改。对其进行更改之前,请对其进行复制。这样一来,我们就可以随时返回原始文档,以防万一我们将副本弄乱了。这是我们复制原始Nginx配置文件的方法:
cp /etc/nginx/nginx.conf /etc/nginx.conf.orig
文件/etc/nginx.conf.orig现在包含原始Nginx配置文件的副本。
原始配置文件示例
这是我原始的Nginx配置文件的样子。随处可见" [\ n]",这意味着我已插入一个与原始行相比的换行符,以便更轻松地在浏览器中查看文件。 #是注释。
user www-data; worker_processes 4; pid /run/nginx.pid; events { worker_connections 768; # multi_accept on; } http { ## # Basic Settings ## sendfile on; tcp_nopush on; tcp_nodelay on; keepalive_timeout 65; types_hash_max_size 2048; # server_tokens off; # server_names_hash_bucket_size 64; # server_name_in_redirect off; include /etc/nginx/mime.types; default_type application/octet-stream; ## # Logging Settings ## access_log /var/log/nginx/access.log; error_log /var/log/nginx/error.log; ## # Gzip Settings ## gzip on; gzip_disable "msie6"; # gzip_vary on; # gzip_proxied any; # gzip_comp_level 6; # gzip_buffers 16 8k; # gzip_http_version 1.1; # gzip_types text/plain text/css application/json [\n] application/x-javascript text/xml [\n] application/xml application/xml+rss text/javascript; ## # nginx-naxsi config ## # Uncomment it if you installed nginx-naxsi ## #include /etc/nginx/naxsi_core.rules; ## # nginx-passenger config ## # Uncomment it if you installed nginx-passenger ## #passenger_root /usr; #passenger_ruby /usr/bin/ruby; ## # Virtual Host Configs ## include /etc/nginx/conf.d/*.conf; include /etc/nginx/sites-enabled/*; } #mail { # # See sample authentication script at: # # http://wiki.nginx.org/ImapAuthenticateWithApachePhpScript # # # auth_http localhost/auth.php; # # pop3_capabilities "TOP" "USER"; # # imap_capabilities "IMAP4rev1" "UIDPLUS"; # # server { # listen localhost:110; # protocol pop3; # proxy on; # } # # server { # listen localhost:143; # protocol imap; # proxy on; # } #}
配置Nginx
Nginx的配置是通过配置文件完成的。究竟要配置什么取决于我们希望Nginx做什么。我将在不久的将来写更多有关它的内容。在此之前,YouTube上的这段视频是一个不错的开始:
使用Nginx设置Web服务器
使用SSL / HTTPS将Nginx配置为反向代理
这是一个示例nginx.conf(Nginx配置文件),向我们展示如何将Nginx配置为反向代理。同样,[\ n]
标记了我其中插入换行符的位置,以使文件更易于在浏览器中查看。删除[\ n]
并在我们自己的文件版本中换行。文件列表之后是有关配置的更多详细信息。
user www-data; worker_processes 4; pid /run/nginx.pid; events { worker_connections 768; # multi_accept on; } http { ## # Basic Settings ## sendfile on; tcp_nopush on; tcp_nodelay on; keepalive_timeout 65; types_hash_max_size 2048; # server_tokens off; # server_names_hash_bucket_size 64; # server_name_in_redirect off; include /etc/nginx/mime.types; default_type application/octet-stream; ## # Logging Settings ## access_log /var/log/nginx/access.log; error_log /var/log/nginx/error.log; ## # Gzip Settings ## gzip on; gzip_disable "msie6"; # gzip_vary on; # gzip_proxied any; # gzip_comp_level 6; # gzip_buffers 16 8k; # gzip_http_version 1.1; # gzip_types text/plain text/css application/json [\n] application/x-javascript text/xml application/xml [\n] application/xml+rss text/javascript; ## # nginx-naxsi config ## # Uncomment it if you installed nginx-naxsi ## #include /etc/nginx/naxsi_core.rules; ## # nginx-passenger config ## # Uncomment it if you installed nginx-passenger ## #passenger_root /usr; #passenger_ruby /usr/bin/ruby; ## # Virtual Host Configs ## server { listen 443; server_name _; ssl on; ssl_certificate certificate-bundle.crt; ssl_certificate_key private-key.pem; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; location / { proxy_pass http://127.0.0.1:8080; } } }
反向代理的所有配置都在server {...}
块内进行。
"监听443"行指示Nginx监听端口443(默认HTTPS端口)。
" server_name _"指示Nginx所有域名都与" server {...}"部分匹配。
" ssl on"行指示Nginx打开SSL / HTTPS。
ssl_certificate certificate-bundle.crt指向证书文件。证书文件路径是" certificate-bundle.crt"。该路径可以指向单个证书文件,或者指向我的证书捆绑包,因为我是从中间证书颁发机构购买的证书。捆绑软件包含我的证书作为文件中的第一个条目,之后包含其余的CA证书(有关更多详细信息,请参见下一部分)。
ssl_certificate_key private-key.pem指向用于生成证书签名请求的原始私钥。 Nginx需要此密钥才能使用证书创建SSL连接。
" ssl_protocols TLSv1 TLSv1.1 TLSv1.2;"行设置启用了哪些SSL协议。在此示例中,我仅启用了TSLv1,TLSv1.1和TLSv1.2. 注意:某些SSL协议(例如SSLv3)存在安全漏洞,因此在启用所有SSL协议之前,请务必参考安全指南。
"位置/ {...}"部分指示Nginx将所有请求从" /"向下转发到网站的虚拟目录结构中,再转发给运行在" http://127.0.0.1:8080"上的网络服务器,这是同一台机器上的端口" 8080"。
我使用OpenSSL生成了我的私钥和证书签名请求。我有一个单独的教程,介绍如何使用OpenSSL创建私钥和证书签名请求以用于Web服务器。
将证书串联到一个文件中
如果我们从中间证书颁发机构(CA)购买证书,则CA可能会向我们发送多个证书。这些证书之一就是证书。另一个是CA的证书。然后,CA可能会向我们发送来自其他CA的一系列证书,这些证书已用于对CA证书进行签名(这就是为什么CA是"中间" CA而不是根CA)。
为了使Nginx能够使用中间CA的证书,我们需要将包括证书在内的所有证书串联到一个证书文件中。证书必须是此串联文件中的第一项。
这是我与NameCheape.com的SSL证书(Comodo Positive SSL最便宜的选择)一起使用的两个unix命令,用于将证书串联到单个证书捆绑文件中。我再次插入了[\ n]
+换行符。删除[\ n]
和换行符,因此命令只是一行。
cat AddTrustExternalCARoot.crt COMODORSAAddTrustCA.crt [\n] COMODORSADomainValidationSecureServerCA.crt > comodo-ca-certificate-bundle.crt
第一条命令将Comodo证书与证书链中的其余证书连接在一起。
第二条命令将证书(myserver-com.crt
)插入证书捆绑文件的顶部:
cat myserver-com.crt comodo-ca-certificate-bundle.crt > certificate-bundle.crt
现在,我们可以从Nginx配置文件中指向certificate-bundle.crt
,如上一节前面所示。
我们可以在以下位置阅读有关使用Nginx配置SSL / HTTPs的更多信息:http://nginx.org/en/docs/http/configuring_https_servers.html