Nginx教程

时间:2020-01-09 10:44:17  来源:igfitidea点击:

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