Nginx基础使用

Nginx中文文档:http://www.nginx.cn/doc/

本文主要参考文章系列:
https://www.cnblogs.com/crazylqy/category/883974.html
https://www.cnblogs.com/zhang-shijie/category/802261.html

1.前言

Nginx优点:

  • Nginx使用基于事件驱动架构,使得其可以支持数以百万级别的TCP连接;
  • 高度的模块化和自由软件许可证是的第三方模块层出不穷(这是个开源的时代啊~)
  • Nginx是一个跨平台服务器,可以运行在Linux, FreeBSD, Solaris, AIX, Mac OS, Windows等操作系统上
  • 这些优秀的设计带来的极大的稳定性。

Nginx是一款自由的、开源的、高性能的HTTP服务器和反向代理服务器;同时也是一个IMAP、POP3、SMTP代理服务器;Nginx可以作为一个HTTP服务器进行网站的发布处理,另外nginx可以作为反向代理进行负载均衡的实现。

正向代理、反向代理和负载均衡可以参考文章:https://www.cnblogs.com/wcwnina/p/8728391.html

几种常用服务器对比:

在这里插入图片描述

虚拟主机:虚拟主机使用的是特殊的软硬件技术,它把一台运行在因特网上的服务器主机分成一台台“虚拟”的主机,每台虚拟主机都可以是一个独立的网站,可以具有独立的域名,具有完整的Intemet服务器功能(WWW、FTP、Email等),同一台主机上的虚拟主机之间是完全独立的。从网站访问者来看,每一台虚拟主机和一台独立的主机完全一样。利用虚拟主机,不用为每个要运行的网站提供一台单独的Nginx服务器或单独运行一组Nginx进程。虚拟主机提供了在同一台服务器、同一组Nginx进程上运行多个网站的功能。

2.安装启动

示例Linux下操作:

# 安装
sudo apt-get install nginx
# 查看版本
nginx -v
# 查看状态
service nginx status
# 其他一些基本操作
sudo service nginx {start|stop|restart|reload|force-reload|configtest|rotate|upgrade}
# 启动Nginx可以使用命令(两个都可以)
service nginx strat / nginx / 
#cd到文件夹/usr/sbin下执行
sudo ./nginx也可以启动nginx

然后浏览器输入localhost,就可以看到Welcome to nginx页面。

我们执行命令whereis nginx之后,可以看到下面目录下都有nginx:

/usr/sbin/nginx	 #程序文件
/etc/nginx #配置文件,并且每个虚拟主机已经安排在了/etc/nginx/sites-available下 
/usr/share/nginx #默认服务器路径,下面有个html文件夹,里面的index.html是默认的主页
/usr/share/man/man1/nginx.1.gz #

日志放在了/var/log/nginx中
并已经在/etc/init.d/下创建了启动脚本nginx
默认的虚拟主机的目录设置在了/var/www/nginx-default (有的版本 默认的虚拟主机的目录设置在了/var/www, 请参考/etc/nginx/sites-available里的配置)

Nginx安装目录文件可以参考文章:
https://blog.csdn.net/qq_25987491/article/details/81562948

Nginx修改默认服务器可以参考:
https://blog.csdn.net/kepoon/article/details/73693390

3.Nginx配置文件

Nginx的主配置文件是:nginx.conf,nginx.conf主要组成如下:

# 全局区   有一个工作子进程,一般设置为CPU数 * 核数
worker_processes  1; 

events {
           # 一般是配置nginx进程与连接的特性
           # 如1个word能同时允许多少连接,一个子进程最大允许连接1024个连接
           worker_connections  1024;
}

# 配置HTTP服务器配置段
http {

      # 配置虚拟主机段
      server {            
                # 定位,把特殊的路径或文件再次定位。
                location  {
                   
                } 
       }

       server {
               ...
       }
    
}

基于域名的虚拟主机:

server {  
        #监听端口 80  
        listen 80;   
                                
        #监听域名abc.com;  
        server_name abc.com;
          
        location {              
             # 相对路径,相对nginx根目录。也可写成绝对路径  
            root    abc;  
            
            # 默认跳转到index.html页面  
            index index.html;                 
        }  
}

基于端口的虚拟主机配置:

server {
        listen  2022;
        server_name     abc.com;
        location {
           root    /home;
           index index.html;
        }
}

基于IP地址虚拟主机配置:

server {
      listen  80;
      server_name  192.168.197.142;
      location {
              root    ip;
              index index.html;
      }
}

Nginx配置文件详解:
https://www.cnblogs.com/liang-wei/p/5849771.html
https://www.cnblogs.com/wanghuaijun/p/5480554.html

4.Nginx日志管理

配置log日志路径的文件是nginx.conf:

access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;

5.nginx.conf配置文件详解

nginx配置文件主要分为六个区域:
main(全局设置)、events(nginx工作模式)、http(http设置)、
sever(主机设置)、location(URL匹配)、upstream(负载均衡服务器设置)。

其中还有若干模块,如HttpGzip模块,stubstatus模块等等。

推荐文章:https://blog.csdn.net/jackliu16/article/details/79444327

结构类似如下:

# 全局区   有一个工作子进程,一般设置为CPU数 * 核数
worker_processes  1; 

events {
           # 一般是配置nginx进程与连接的特性
           # 如1个word能同时允许多少连接,一个子进程最大允许连接1024个连接
           worker_connections  1024;
}

# 配置HTTP服务器配置段
http {

      # 配置虚拟主机段
      server {            
                # 定位,把特殊的路径或文件再次定位。
                location  {
                   
                } 
       }

       server {
               ...
       }
    
}

以下是结合具体实例对nginx.conf配置文件的详细解析

1.全局配置
user  nobody nobody; # 主模块指令,指定nginx worker进程运行用户及用户组,默认为nobody账号
worker_processes  4; # 主模块指令,指定开启进程数,一般指定一个进程就足够了,建议指定和CPU数目相同的进程数即可。

# worker_rlimit_nofile用于绑定worker进程和CPU,Linux内核2.4以上使用
pid        logs/nginx.pid;
worker_rlimit_nofile  65535;

#evetn指令用来设置nginx的工作模式及连接上限
#use是个事件模块指令,用于指定工作模式,nginx支持的工作模式有select、poll、kqueue、epoll、rtsig、和/dev/poll,其中select和poll都是标准的工作模式。kqueue和epoll是高效的工作模式,其中kqueue用于BSD系统,而epoll用于Linux系统,对于Linux系统,epoll是首选。
# worker_connections时间模块指令,用于定义进程的最大连接数,默认为1024,。
#最大客户连接数由worker_connections和worker_processes决定,即max_client=worker_processes*worker_connections,在作为反向代理时变为:max_client= worker_processes*worker_connections/4。
#进程的最大连接数受Linux系统进程的最大打开文件数限制,在执行操作系统命令“ulimit –n 65536”后worker_connections的设置才生效。

event{
		use epoll;
		worker_connections 65536;
}

2.HTTPGzip设置
gzip  on; #启实时gzip压缩输出数据流,减少网络传输
gzip_min_length 1k; ##gzip_min_length设置允许压缩的页面最小字节数,页面字节数从header头的content-length中进行获取。默认值是0,不管页面大小都进行压缩。建议设置成大于1k的字节数,小于1k可能会越压越大。
gzip_buffers 4 16k; #gzip_buffers设置系统获取几个单位的缓存用于存储gzip的压缩结果数据流。4 16k代表申请4个单位为16K的内存作为压缩结果六缓存
gzip_http_version  1.1; #用于识别 http 协议的版本,默认是1.1,目前绝大多数浏览器已经支持gzip解压。
gzip_comp_level  6; #gzip压缩比,1压缩比最小处理速度最快,9压缩比最大但处理速度最慢(传输快但比较消耗cpu)
#gzip_types指定何种类型进行压缩,无论是否指定,”text/html”类型总是会被压缩的。
gzip_types text/html text/plaintext/css text/javascript application/json application/javascriptapplication/x-javascript application/xml;
gzip_vary   on; #gzip_vary:和http头有关系,会在响应头加个 Vary: Accept-Encoding ,可以让前端的缓存服务器缓存经过gzip压缩的页面,例如,用Squid缓存经过Nginx压缩的数据。

3.http服务器配置
http{
	include mime.types;  #include是个主模块指令,实现对配置文件所包含的文件的设定,可以减少主配置文件的复杂度。
	
	#default_type属于http核心模块指令,默认为二进制流,也就是当文件类型未定义时使用这种方式,例如在没有配置PHP环境时,nginx是不与解析的,此时,用浏览器访问PHP文件就会出现下载窗口。
	default_type application/octet-stream;
	
	client_max_body_size  20m; #设置允许客户端请求的最大单个文件字节数
	client_header_buffer_size  32k; #用于指定客户端请求头的headerbuffer大小,对于大多数请求,1kb的缓冲区大小已经足够,如果定义了消息头或有更大的cookie,可以增加缓冲区大小。

	large_client_header_buffers  4   32k; #用于指定客户端请求中较大的消息头的缓存最大数量和大小
	sendfile   on; #sendfile用于开启高效文件传输模式,将tcp_nopush和tcp_nodely另个指令设置为on,用于防止网络阻塞。
	keepalive_timeout  65; ##keepalive_timeout用于设置客户端连续保持活动的超时时间。
	
	client_header_timeout 10; #client_header_timeout用于设置客户端请求头读取超时时间,超过该时间客户端还没发送任何数据,nginx将返回“request time out(408)”错误。
	
	client_body_timeout    10; #client_body_timeout用于设置客户端请求主体读取超时时间,默认时间为602s,超过该时间客户端还没发送任何数据,nginx将返回“request timeout(408)”错误。

    send_timeout  10; #send_timeout 用于指定响应客户端的超时时间,这个超时仅限于两个连接活动之间的时间,如果超过这个时间,客户端没有任何活动,nginx将会关闭连接。
}

4.负载均衡配置
upstream是nginx的http upstream模块,这个模块通过一个简单的调度算法来实现客户端IP到后端服务器的负载均衡。
upstream myserver{
	upstream  example.com; # 指定一个负载均衡器的名称为example.com。
	ip_hash; #ip_hash调度算法,每个请求按IP的hash结果分配,是来自同一个IP的访客固定访问一个后端服务器,有效解决了动态服务器存在的session共享问题.
	
	server  192.168.56.102:8088 #server:该指令指定后端服务器的IP地址和端口,同时还可以指定每个后端服务器在负载均衡调度中的状态,常见的状态有:down,backup,max_fails,fail_timeout。
	#backup:预留的备份机器,当其他所有的非backup机器出现故障或正在忙时,##才会请求backup机器,该机器压力最轻。当调度算法为ip_hash,状态不能##为backup和weight;
	#down:表示当前server暂时不参与负载均衡
	#max_fails:允许请求失败的次数,默认为1。当超过最大次数时,返回
	#proxy_next_upstream模块定义错误。
	#fail_timeout:经历max_fails次失败后,暂停服务的时间。
}
server{
	listen    8088;      

    server_name  www.example.com 192.168.56.110; #指定IP地址或者域名,多个域名之间用空格隔开。

    index  index.html index.htm  index.jsp; #设定访问的默认首页地址

    root   /web/wwwroot/www; #指定主机的网页根目录,这个目录可以是相对路径,也可以是绝对路径

	#对 / 路径所有做负载均衡+反向代理
	location{
			proxy_pass   http://myserver;  
			#proxy_pass http://myserver:实现负载调度功能,proxy_pass指令用来指定请求转向代理的后端服务器定义的服务器列表,即反向代理,对应upstream负载均衡器。地址也可以是主机名或者IP地址,如:proxy_passhttp://ip:port。
			proxy_next_upstream   http_500  http_502  http_503   http_504 error  timeout invalid_header;
			#proxy_next_upstream:定义故障转移策略,当后端服务器节点返回500、502、503、504和执行超时等错误时,自动将请求转发到upstream负载均衡组中的另一台服务器,实现故障转移。
	}

}

5.http_proxy设置
#该部分可以使用写进proxy.conf文件中,再使用include指令包含进来,从而使配置显得更简练
include /opt/nginx/conf/proxy.conf

client_max_body_size   10m;

client_body_buffer_size   128k; #client_body_buffer_size:用于指定客户端请求主体缓冲区大小,意思就是先保存到本地再传给用户。

proxy_connect_timeout   75; #nginx跟后端服务器连接超时时间(代理连接超时)

 proxy_send_timeout   75; #proxy_send_timeout:后端服务器的数据回传时间,超时则断开连接

proxy_read_timeout   75; #proxy_read_timeout:设置nginx从代课的后端服务器获取信息的时间,即在规定时间之内后端服务器必须传完所有的数据,否则断开连接。

proxy_buffer_size   4k; #设置代理服务器(nginx)从后端服务器读取并保存用户头信息的缓冲区大小,默认与proxy_buffers大小相同,其实可以将这个指令值设的小一点

proxy_buffers   4  32k; #proxy_buffers缓冲区,nginx针对单个连接缓存来自后端realserver的响应,网页平均在32k以下的话,这样设置

proxy_busy_buffers_size    64k; #高负荷下缓冲大小(官方建议为proxy_buffers*2)

proxy_temp_file_write_size   64k; #指定proxy缓存临时文件的大小

proxy_temp_path    /usr/local/nginx/proxy_temp 1 2; #当缓存被代理的服务器响应到临时文件时,这个选项限制每次写临时文件的大小。proxy_temp_path(可以在编译的时候)指定写到哪那个目录。

proxy_redirect off; # 后端的Web服务器可以通过X-Forwarded-For获取用户真实IP

proxy_set_header  Host $host; #proxy_set_header:设置由后端服务器获取用户主机或真实IP地址,以及代理者的真实IP

proxy_set_header  X-Real-IP $remote_addr;  #

proxy_set_header  X-Forwarded-For  $proxy_add_x_forwarded_for;

详细内容可以查看:
https://blog.csdn.net/field_yang/article/details/52278390
https://blog.csdn.net/jackliu16/article/details/79444327

还可以参考文章:

https://www.oschina.net/translate/nginx-tutorial-basics-concepts

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值