Nginx知识详解

使用 Nginx 前必须了解的事项

  1. 目前官方 Nginx 并不支持 Windows,您只能在包括 Linux、UNIX、BSD 系统下安装和使用;
  2. Nginx 本身只是一个 HTTP 和反向代理服务器,它无法像 Apache 一样通过安装各种模块来支持不同的页面脚本,例如 PHP、CGI 等;
  3. Nginx 支持简单的负载均衡和容错;
  4. 支持作为基本 HTTP 服务器的功能,例如日志、压缩、Byte ranges、Chunked responses、SSL、虚拟主机等等,应有尽有。

在 Linux 下安装 Nginx

为了确保能在 Nginx 中使用正则表达式进行更灵活的配置,安装之前需要确定系统是否安装有 PCRE(Perl Compatible Regular Expressions)包。您可以到 ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/ 下载最新的 PCRE 源码包,使用下面命令下载编译和安装 PCRE 包:

# wget ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-7.7.tar.gz
# tar zxvf pcre-7.7.tar.gz
# cd pcre-7.7
# ./configure
# make
# make install

接下来安装 Nginx,Nginx 一般有两个版本,分别是稳定版和开发版,您可以根据您的目的来选择这两个版本的其中一个,下面是把 Nginx 安装到 /opt/nginx 目录下的详细步骤:

# wget http://sysoev.ru/nginx/nginx-0.6.31.tar.gz
# tar zxvf nginx-0.6.31.tar.gz
# cd nginx-0.6.31
# ./configure --with-http_stub_status_module –prefix=/opt/nginx
# make
# make install

其中参数 --with-http_stub_status_module 是为了启用 nginx 的 NginxStatus 功能,用来监控 Nginx 的当前状态。

安装成功后 /opt/nginx 目录下有四个子目录分别是:conf、html、logs、sbin 。其中 Nginx 的配置文件存放于 conf/nginx.conf,Nginx 只有一个程序文件位于 sbin 目录下的 nginx 文件。确保系统的 80 端口没被其他程序占用,运行 sbin/nginx 命令来启动 Nginx,打开浏览器访问此机器的 IP,如果浏览器出现 Welcome to nginx! 则表示 Nginx 已经安装并运行成功。

常用的 Nginx 参数和控制

程序运行参数

Nginx 安装后只有一个程序文件,本身并不提供各种管理程序,它是使用参数和系统信号机制对 Nginx 进程本身进行控制的。 Nginx 的参数包括有如下几个:

-c <path_to_config>:使用指定的配置文件而不是 conf 目录下的 nginx.conf 。

-t:测试配置文件是否正确,在运行时需要重新加载配置的时候,此命令非常重要,用来检测所修改的配置文件是否有语法错误。

-v:显示 nginx 版本号。

-V:显示 nginx 的版本号以及编译环境信息以及编译时的参数。

例如我们要测试某个配置文件是否书写正确,我们可以使用以下命令

sbin/nginx – t – c conf/nginx2.conf

通过信号对 Nginx 进行控制

Nginx 支持下表中的信号:

信号名 作用描述
TERM, INT 快速关闭程序,中止当前正在处理的请求
QUIT 处理完当前请求后,关闭程序
HUP 重新加载配置,并开启新的工作进程,关闭就的进程,此操作不会中断请求
USR1 重新打开日志文件,用于切换日志,例如每天生成一个新的日志文件
USR2 平滑升级可执行程序
WINCH 从容关闭工作进程
有两种方式来通过这些信号去控制 Nginx,第一是通过 logs 目录下的 nginx.pid 查看当前运行的 Nginx 的进程 ID,通过  kill – XXX <pid>  来控制 Nginx,其中 XXX 就是上表中列出的信号名。如果您的系统中只有一个 Nginx 进程,那您也可以通过  killall  命令来完成,例如运行 killall – s HUP nginx  来让 Nginx 重新加载配置。

配置 Nginx

先来看一个实际的配置文件:

 user  nobody;# 工作进程的属主
 worker_processes  4;# 工作进程数,一般与 CPU 核数等同

 #error_log  logs/error.log; 
 #error_log  logs/error.log  notice; 
 #error_log  logs/error.log  info; 

 #pid        logs/nginx.pid; 

 events { 
    use epoll;#Linux 下性能最好的 event 模式
    worker_connections  2048;# 每个工作进程允许最大的同时连接数
 } 

 http { 
    include       mime.types; 
    default_type  application/octet-stream; 

    #log_format  main  '$remote_addr - $remote_user [$time_local] $request ' 
    #                  '"$status" $body_bytes_sent "$http_referer" ' 
    #                  '"$http_user_agent" "$http_x_forwarded_for"'; 

    #access_log  off; 
    access_log  logs/access.log;# 日志文件名

    sendfile        on; 
    #tcp_nopush     on; 
    tcp_nodelay     on; 

    keepalive_timeout  65; 

    include 	 gzip.conf; 
    
    # 集群中的所有后台服务器的配置信息
    upstream tomcats { 
	 server 192.168.0.11:8080 weight=10; 
	 server 192.168.0.11:8081 weight=10; 
	 server 192.168.0.12:8080 weight=10; 
	 server 192.168.0.12:8081 weight=10; 
	 server 192.168.0.13:8080 weight=10; 
	 server 192.168.0.13:8081 weight=10; 
    } 

    server { 
        listen       80;#HTTP 的端口
        server_name  localhost; 

        charset utf-8; 

        #access_log  logs/host.access.log  main; 

	 location ~ ^/NginxStatus/ { 
	    stub_status on; #Nginx 状态监控配置
	    access_log off; 
	 } 

	 location ~ ^/(WEB-INF)/ { 
	    deny all; 
	 } 
	

	 location ~ \.(htm|html|asp|php|gif|jpg|jpeg|png|bmp|ico|rar|css|js|
	 zip|java|jar|txt|flv|swf|mid|doc|ppt|xls|pdf|txt|mp3|wma)$ { 
             root /opt/webapp; 
	    expires 24h; 
        } 

        location / { 
	    proxy_pass http://tomcats;# 反向代理
	    include proxy.conf; 
        } 

        error_page 404 /html/404.html; 

        # redirect server error pages to the static page /50x.html 
        # 
	 error_page 502 503 /html/502.html; 
        error_page 500 504 /50x.html; 
        location = /50x.html { 
            root   html; 
        } 
    } 
 }

Nginx 监控

上面是一个实际网站的配置实例,其中灰色文字为配置说明。上述配置中,首先我们定义了一个 location ~ ^/NginxStatus/,这样通过 http://localhost/NginxStatus/ 就可以监控到 Nginx 的运行信息,显示的内容如下:

Active connections: 70 
server accepts handled requests
 14553819 14553819 19239266 
Reading: 0 Writing: 3 Waiting: 67

NginxStatus 显示的内容意思如下:

  • active connections – 当前 Nginx 正处理的活动连接数。
  • server accepts handled requests -- 总共处理了 14553819 个连接 , 成功创建 14553819 次握手 ( 证明中间没有失败的 ), 总共处理了 19239266 个请求 ( 平均每次握手处理了 1.3 个数据请求 )。
  • reading -- nginx 读取到客户端的 Header 信息数。
  • writing -- nginx 返回给客户端的 Header 信息数。
  • waiting -- 开启 keep-alive 的情况下,这个值等于 active - (reading + writing),意思就是 Nginx 已经处理完正在等候下一次请求指令的驻留连接。

静态文件处理

通过正则表达式,我们可让 Nginx 识别出各种静态文件,例如 images 路径下的所有请求可以写为:

location ~ ^/images/ {
    root /opt/webapp/images;
}

而下面的配置则定义了几种文件类型的请求处理方式。

location ~ \.(htm|html|gif|jpg|jpeg|png|bmp|ico|css|js|txt)$ {
    root /opt/webapp;
    expires 24h;
}

对于例如图片、静态 HTML 文件、js 脚本文件和 css 样式文件等,我们希望 Nginx 直接处理并返回给浏览器,这样可以大大的加快网页浏览时的速度。因此对于这类文件我们需要通过 root 指令来指定文件的存放路径,同时因为这类文件并不常修改,通过 expires 指令来控制其在浏览器的缓存,以减少不必要的请求。 expires 指令可以控制 HTTP 应答中的“ Expires ”和“ Cache-Control ”的头标(起到控制页面缓存的作用)。您可以使用例如以下的格式来书写 Expires:

expires 1 January, 1970, 00:00:01 GMT;
expires 60s;
expires 30m;
expires 24h;
expires 1d;
expires max;
expires off;

动态页面请求处理

Nginx 本身并不支持现在流行的 JSP、ASP、PHP、PERL 等动态页面,但是它可以通过反向代理将请求发送到后端的服务器,例如 Tomcat、Apache、IIS 等来完成动态页面的请求处理。前面的配置示例中,我们首先定义了由 Nginx 直接处理的一些静态文件请求后,其他所有的请求通过 proxy_pass 指令传送给后端的服务器(在上述例子中是 Tomcat)。最简单的 proxy_pass 用法如下:

location / {
    proxy_pass        http://localhost:8080;
    proxy_set_header  X-Real-IP  $remote_addr;
}

这里我们没有使用到集群,而是将请求直接送到运行在 8080 端口的 Tomcat 服务上来完成类似 JSP 和 Servlet 的请求处理。

当页面的访问量非常大的时候,往往需要多个应用服务器来共同承担动态页面的执行操作,这时我们就需要使用集群的架构。 Nginx 通过upstream 指令来定义一个服务器的集群,最前面那个完整的例子中我们定义了一个名为 tomcats 的集群,这个集群中包括了三台服务器共 6 个 Tomcat 服务。而 proxy_pass 指令的写法变成了:

location / {
    proxy_pass        http://tomcats;
    proxy_set_header  X-Real-IP  $remote_addr;
}

在 Nginx 的集群配置中,Nginx 使用最简单的平均分配规则给集群中的每个节点分配请求。一旦某个节点失效时,或者重新起效时,Nginx 都会非常及时的处理状态的变化,以保证不会影响到用户的访问。

总结

尽管整个程序包只有五百多 K,但麻雀虽小、五脏俱全。 Nginx 官方提供的各种功能模块应有尽有,结合这些模块可以完整各种各样的配置要求,例如:压缩、防盗链、集群、FastCGI、流媒体服务器、Memcached 支持、URL 重写等等,更关键的是 Nginx 拥有 Apache 和其他 HTTP 服务器无法比拟的高性能。您甚至可以在不改变原有网站的架构上,通过在前端引入 Nginx 来提升网站的访问速度。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Linux和Nginx是两个不同的东西,Linux是一种操作系统,而Nginx是一种Web服务器软件。在Linux上安装和配置Nginx可以提供高性能的Web服务。 Nginx的配置文件是nginx.conf,其中包含了Nginx的各种配置选项。常见的配置选项包括监听端口、虚拟主机、反向代理、负载均衡等。 在配置Nginx时,需要注意以下几点: 1. 监听端口:Nginx默认监听80端口,可以通过修改nginx.conf文件中的listen选项来修改监听端口。 2. 虚拟主机:Nginx支持虚拟主机,可以通过配置server块来实现。每个server块代表一个虚拟主机,可以配置不同的域名、端口、SSL证书等。 3. 反向代理:Nginx可以作为反向代理服务器,将请求转发到后端的应用服务器。可以通过配置proxy_pass选项来实现。 4. 负载均衡Nginx可以实现负载均衡,将请求分发到多个后端服务器上。可以通过配置upstream块和proxy_pass选项来实现。 以上是Nginx配置的一些基本知识,具体的配置方法可以参考Nginx官方文档或者相关的教程。 ### 回答2: Linux是一种开源的操作系统,消费者可以免费使用和修改。NGINX是一种高性能、开源的HTTP服务器和反向代理服务器,已经成为互联网枢纽的关键组件之一。在本文中,我们将详细介绍如何在Linux安装和配置NGINX。 第一步:安装Linux操作系统 首先,需要为服务器选择操作系统。建议选择Ubuntu、Debian、Red Hat、CentOS或Fedora等Linux操作系统,并确保最新版本已经安装。必须确保操作系统安全和保护服务器免受隐患的影响。 第二步:安装NGINX 接下来,需要在Linux服务器上安装NGINX。这里以Ubuntu操作系统为例,使用以下命令: $sudo apt-get update $sudo apt-get install nginx 这个命令将在Linux系统上自动安装NGINX,并为您配置必要的文件和目录。您可以使用以下命令检查NGINX是否正确安装: $nginx -v 第三步:运行NGINX 安装NGINX之后,需要使用以下命令启动该服务器: $sudo systemctl start nginx 启动NGINX后,可以使用以下命令检查该服务器是否在监听: $sudo systemctl status nginx 这个命令将返回一个类似于以下的响应: nginx.service – A high performance web server and a reverse proxy server Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled) Active: active (running) since Mon 2021-10-18 00:42:30 UTC; 15min ago Main PID: 15611 (nginx) Tasks: 2 (limit: 2297) Memory: 5.5M CGroup: /system.slice/nginx.service ├─15611 nginx: master process /usr/sbin/nginx -g daemon on; master_proces └─15612 nginx: worker process Oct 18 00:42:30 ubuntu systemd[1]: Starting A high performance web server Oct 18 00:42:30 ubuntu systemd[1]: Started A high performance web server 以上响应证明NGINX已经成功启动。 第四步:配置NGINX 为了使NGINX服务器适应您的需求,必须修改其配置文件。此文件通常命名为nginx.conf并位于以下目录中:/etc/nginx/nginx.conf。 编辑此配置文件后,使用以下命令重新启动服务器: $sudo systemctl restart nginx 在Linux中安装NGINX可以为您的网站提供高质量的服务。可以利用其反向代理功能,使网站具有高效性和扩展性。NGINX的优势在于它可以通过主动配置和细致的优化,将其性能提高到极限。 总的来说,Linux和NGINX的安装和配置相对简单,通过掌握这些技能,可以帮助您更好地管理并保护服务器。 ### 回答3: Nginx一个热门的开源Web服务器软件,具有出色的性能和灵活性,成为了许多网页服务器的首选。在Linux系统中搭建Nginx服务器相对简单,可以通过一些简单的命令来实现。下面我们来详细了解一下Linux Nginx配置的方法。 1.安装Nginx 在Linux中,可以使用apt-get命令来安装Nginx。要安装Nginx,您需要输入以下命令: sudo apt-get update sudo apt-get install nginx 这将安装最新版本的Nginx,并启动Web服务器,默认情况下,Nginx的网站的根目录是/var/www/html/,您可以在此处添加你自己的网站内容。 2.配置Nginx 要配置Nginx,您需要编辑Nginx的配置文件。在Ubuntu中,配置文件默认位于/etc/nginx/nginx.conf。使用以下命令打开这个文件: sudo nano /etc/nginx/nginx.conf 你可以在这里定义 Nginx 的主要设置,例如worker_processes, worker_connections等等。此外,您也可以编辑Nginx的虚拟主机设置,通过编辑/etc/nginx/sites-available/default文件来修改网站的设置。 3.启动和重启Nginx 在安装和配置完Nginx后,您可以使用以下命令来启动Web服务器: sudo systemctl start nginx 要重启Nginx服务器,您可以使用以下命令: sudo systemctl restart nginx 4.反向代理设置 Nginx也可以用作反向代理服务器。反向代理服务器充当两个Web服务器之间的中介,可以通过将请求从客户端传递给Web服务器来帮助加强安全性和可扩展性。在Nginx中,您可以使用以下指令来设置反向代理: location / { proxy_pass http://localhost:8080; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } 这将将请求传递给本地主机的端口8080上运行的Web服务器,并设置适当的代理头以正确显示源IP地址和客户机IP地址。 总之,Linux Nginx服务器的配置非常简单,只需要按照上面的步骤进行即可。通过灵活性和性能,Nginx 成为了许多网站服务器的首选,因此掌握 Linux Nginx 的配置和使用对于Web开发人员来说是非常重要的。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值