Nginx新手学习

一、了解什么是nginx?

Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务。
特点:支持高并发、占用内存少、跨平台、配置简单

二、为什么要用nginx(通俗)?

1.动静分离:当我们的项目部署到服务器上,想要去访问那些静态资源,怎么访问?通过ip和资源地址肯定是拿不到的。这个时候我们就用nginx,去映射那个路径,然后访问nginx,这个时候它就会去访问我们在里面配置的地址,然后就可以拿到我们的资源。
2.反向代理:访问资源的时候,我们直接访问nginx,然后它会去帮我们找相应的服务器,至于是哪个服务器我们不知道,但是它会合理去查找分配
3.正向代理
4.负载均衡

三、nginx配置文件详解

这里我拿一份删掉多余注释了的nginx配置文件来说明


#user  nobody;
worker_processes  1;

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

#pid        logs/nginx.pid;


events {
    worker_connections  1024;
}


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


    sendfile        on;
   
    keepalive_timeout  65;

    server {
        listen       800;
        server_name  localhost:8080;
        location / {
		proxy_pass http://localhost:8080/springm_war_exploded/;
        }
		
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }

	server {
		listen   8000;
		server_name locahost;
		
		location / {
			root html;
			index index.html index.htm;
		}
		 #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
	}
}

worker_connections:这是 Nginx 服务器并发处理服务的关键配置,worker_processes 值越大,可以支持的并发处理量也越多,但是 会受到硬件、软件等设备的制约
events块:events 块涉及的指令,主要影响 Nginx 服务器与用户的网络连接,常用的设置包括是否开启对多 work process 下的网络连接进行序列化,是否 允许同时接收多个网络连接,选取哪种事件驱动模型来处理连接请求,每个 word process 可以同时支持的最大连接数等。上述例子就表示每个 work process 支持的最大连接数为 1024.
http全局块:http全局块配置的指令包括文件引入、MIME-TYPE 定义、日志自定义、连接超时时间、单链接请求数上限等。
server 块:这块和虚拟主机有密切关系,虚拟主机从用户角度看,和一台独立的硬件主机是完全一样的,该技术的产生是为了 节省互联网服务器硬件成本。
listen:表示当前的代理服务器监听的端口,默认的是监听80端口。注意,如果我们配置了多个server,这个listen要配置不一样,不然就不能确定转到哪里去了。
server_name:表示监听到之后需要转到哪里去,这时我们直接转到本地,这时是直接到nginx文件夹内。
location:表示匹配的路径,这时配置了/表示所有请求都被匹配到这里
location 块:一个 server 块可以配置多个 location 块。这块的主要作用是基于 Nginx 服务器接收到的请求字符串(例如 server_name/uri-string),对虚拟主机名称 (也可以是IP 别名)之外的字符串(例如 前面的 /uri-string)进行匹配,对特定的请求进行处理。 地址定向、数据缓 存和应答控制等功能,还有许多第三方模块的配置也在这里进行。
root:里面配置了root这时表示当匹配这个请求的路径时,将会在这个文件夹内寻找相应的文件,这里对我们之后的静态文件伺服很有用。
index:当没有指定主页时,默认会选择这个指定的文件,它可以有多个,并按顺序来加载,如果第一个不存在,则找第二个,依此类推。
下面的error_page是代表错误的页面,先不用它。
proxy_pass:它表示代理路径,相当于转发,而不像之前说的root必须指定一个文件夹。这里我转发的是一个我本地启动的tomcat项目
(这里也就是说我们访问本地的locahost:80,nginx会转到localhost本地下的html文件夹中的index.html去)

四、nginx解决跨域问题

同源策略:是指协议,域名,端口都要相同,其中有一个不同都会产生跨域;
Nginx实现跨域原理:Nginx作为代理服务器,通过转发客户端请求实现客户端与服务端在一个域中。

server { 
listen 3002; 
server_name localhost; 
location /ok { 
proxy_pass http://localhost:3000; 
# 指定允许跨域的方法,*代表所有 
add_header Access-Control-Allow-Methods *; 
# 预检命令的缓存,如果不缓存每次会发送两次请求 
add_header Access-Control-Max-Age 3600; 
# 带cookie请求需要加上这个字段,并设置为true 
add_header Access-Control-Allow-Credentials true; 
# 表示允许这个域跨域调用(客户端发送请求的域名和端口) 
# $http_origin动态获取请求客户端请求的域 不用*的原因是带cookie的请求不支持*号 
add_header Access-Control-Allow-Origin $http_origin; 
# 表示请求头的字段 动态获取 
add_header Access-Control-Allow-Headers $http_access_control_request_headers; 
# OPTIONS预检命令,预检命令通过时才发送请求 
# 检查请求的类型是不是预检命令 
if ($request_method = OPTIONS){ 
return 200; 
} } } 

五、配置静态文件

user www www;             #指定nginx worker进程运行用户及用户组
worker_processes 2;       #设置进程数,每个Nginx进程平均耗费10M~12M内存。建议指定和CPU的数量一致即可
error_log /usr/local/nginx/logs/nginx_error.log crit;        #日志位置和日志级别,日志输出级别有debug、info、notice、warn、error、crit可供选择,其中,debug输出日志最为最详细,而crit输出日志最少
pid /usr/local/nginx/nginx.pid;                #指定进程pid的存储文件位置
#Specifies the value for maximum file descriptors that can be opened by this process.
worker_rlimit_nofile 65535;   #设置Nginx进程文件句柄数

events 
{
  use epoll;                      #指定Nginx的工作模式,Nginx支持的工作模式有select、poll、kqueue、epoll、rtsig和/dev/poll。其中select和poll都是标准的工作模式,kqueue和epoll是高效的工作模式,不同的是epoll用在Linux平台上,而kqueue用在BSD系统中。对于Linux系统,epoll工作模式是首选。
  worker_connections 65535;       #定义Nginx每个进程的最大连接数
}

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';     #定义日志格式,所支持的全部变量可以在官方文档里查询
  
#charset gb2312;
     
  server_names_hash_bucket_size 128;
  client_header_buffer_size 32k;             #指定来自客户端请求头的headerbuffer大小
  large_client_header_buffers 4 32k;         #指定客户端请求中较大的消息头的缓存最大数量和大小, “4”为个数,“32K”为大小,最大缓存量为432K
  client_max_body_size 8m;                   #设置允许客户端请求的最大的单个文件字节数
     
  sendfile on;                 #开启高效文件传输模式
  tcp_nopush on;               #设置为on用于防止网络阻塞
  keepalive_timeout 60;        #设置客户端连接保持活动的超时时间
  tcp_nodelay on;              #设置为on用于防止网络阻塞
  
  #FastCGI相关参数是为了改善网站的性能:减少资源占用,提高访问速度
  fastcgi_connect_timeout 300;
  fastcgi_send_timeout 300;
  fastcgi_read_timeout 300;
  fastcgi_buffer_size 64k;
  fastcgi_buffers 4 64k;
  fastcgi_busy_buffers_size 128k;
  fastcgi_temp_file_write_size 128k;
  
  #gzip模块设置
  gzip on;                #表示开启GZIP压缩,实时压缩输出数据流
  gzip_min_length 1k;     #设置允许最小压缩文件大小
  gzip_buffers 4 16k;     #表示申请4个单位为16K的内存作为压缩缓冲区
  gzip_http_version 1.0;  #设置识别HTTP协议版本
  gzip_comp_level 2;      #指定GZIP压缩比,1 压缩比最小,处理速度最快;9 压缩比最大,传输速度快,但处理最慢,也比较消耗cpu资源
  gzip_types text/plain application/x-javascript text/css application/xml;       #指定压缩的类型,无论是否指定,“text/html”类型总是会被压缩的
  gzip_vary on;           #选项可以让前端的缓存服务器缓存经过GZIP压缩的页面,例如用Squid缓存经过Nginx压缩的数据
  
  #开启限制IP连接数的时候需要使用
  #limit_zone crawler $binary_remote_addr 10m;
  
  #配置代理
  upstream tomcat {
      server  127.0.0.1:8081 weight=10;
      server  127.0.0.1:8082 weight=10;
      server  127.0.0.1:8083 weight=10;
}
  
 #虚拟主机的配置
 server
  {
    listen 80;#监听端口
    server_name g06702;#域名
    index index.html index.htm index.php;
    root /usr/local/nginx/html;#站点目录
    
     # 配置代理路径
        location /docker{
                proxy_pass http://tomcat/;
        }

        # 对“/”路径转发 /docker
        location = / {
        return 302 /docker;
        }
    
      location ~ .*\.(php|php5)?$
    {
      #fastcgi_pass unix:/tmp/php-cgi.sock;
      fastcgi_pass 127.0.0.1:9000;
      fastcgi_index index.php;
      include fastcgi.conf;
    }
	
    location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|ico)$
    {
      root /usr/local/static;#路径
      expires 30d;  #指定静态文件的过期时间
      # access_log off;
    }
	
    location ~ .*\.(js|css)?$
    {
      expires 15d;  #JS和CSS缓存时间设置
      # access_log off;
    }   
    access_log off;
  }

}

**

写到这里,博主懒得写了,因为看到下方的链接基本写的非常详细了,自愧不如。所以上给哪些还没找到最全面的讲解的人。所有的从安装到每一句配置讲解,请参考以下博客,写的非常好,只需要看这一篇就够了:

**

https://blog.csdn.net/qq_40036754/article/details/102463099

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值