• 【服务器】Nginx安装以及配置详解(包括SSL,Proxy代理)


    代理服务器

    Nginx 安装

    一句命令安装nginx

    yum install -y nginx
    

    启动

    systemctl start nginx.service
    

    设置nginx开机自启动

    systemctl enable nginx.service
    

    关闭

    systemctl stop nginx.service
    

    重启

    systemctl restart nginx.service
    

    网站文件存放默认位置(Welcome to nginx 页面)

    /usr/share/nginx/html
    

    网站默认站点配置

    /etc/nginx/conf.d/default.conf
    

    自定义配置文件存放目录

    /etc/nginx/conf.d/
    

    全局配置文件

    /etc/nginx/nginx.conf
    

    config详解

    
    #user  nobody;
    worker_processes  1; #工作进程数,一般和CPU核心数一致
    
    #日志位置和日志级别[debug | info | notice | warn | error | crit]
    #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; #==最大连接数,一般设置为cpu*1048
    }
    
    # Load dynamic modules. See /usr/share/doc/nginx/README.dynamic.
    #动态加载模块化的http配置
    include /usr/share/nginx/modules/*.conf;
    
    #设定http服务器
    http {
        #文件扩展名与文件类型映射表
        include       mime.types;
        #默认文件类型
        default_type  application/octet-stream;
        #设定读取大型客户端请求头的缓冲区的最大数量和大小
        large_client_header_buffers 4 64k; 
        #请求头分配一个缓冲区。如果请求头大小大于指定的缓冲区,则使用large_client_header_buffers指令分配更大的缓冲区。
        client_header_buffer_size 32k; 
        #设置NGINX能处理的最大请求主体大小。 如果请求大于指定的大小,则NGINX发回HTTP 413(Request Entity too large)错误。
        client_max_body_size 8m;
    	
        #日志,有问题记得看日志
        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  logs/access.log  main;
        error_log 	logs/error.log;
    	
        #开启高效文件传输模式,sendfile指令指定nginx是否调用sendfile函数来输出文件,对于普通应用设为 on,如果用来进行下载等应用磁盘IO重负载应用,可设置为off,以平衡磁盘与网络I/O处理速度,降低系统的负载。注意:如果图片显示不正常把这个改成off。
        sendfile        on;
        #开启目录列表访问,合适下载服务器,默认关闭。
        autoindex		on; 
        #防止网络阻塞
        #tcp_nopush 配置和 tcp_nodelay "互斥",tcp_nopush 必须和 sendfile 搭配使用
        tcp_nopush      on;
        #tcp_nodelay off,会增加通信的延时,但是会提高带宽利用率。高延时、数据量大的通信场景中会有不错效果
        #tcp_nodelay on,会增加小包的数量,但是可以提高响应速度。及时性高的通信场景中会有不错的效果
        #tcp_nodelay 	on;
        #客户端链接超时时间
        #keepalive_timeout  0;
        keepalive_timeout  65;
    	
        #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_min_length 1k; 
        #压缩缓冲区
        gzip_buffers 4 16k; 
        #压缩版本(默认1.1,前端如果是squid2.5请使用1.0)
        gzip_http_version 1.0; 
        #压缩等级
        gzip_comp_level 2; 
        #压缩类型,默认就已经包含textml,所以下面就不用再写了,写上去也不会有问题,但是会有一个warn。
        gzip_types text/plain application/x-javascript text/css application/xml;
        #用与设置Gzip功能是否发送带有“Vary:Accept-Encoding”头域的响应头部
        gzip_vary on;
        #limit_zone crawler $binary_remote_addr 10m; #开启限制IP连接数的时候需要使用
    
        # 负载均衡,待选服务器列表
        upstream myUpstream{
            # 每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。
            ip_hash;
            #  按后端服务器的响应时间来分配请求,响应时间短的优先分配。
            # fair;
            # weight 表示权重,weight越大,负载的权重就越大。
            # fail_timeout 失败后,暂停的时间
            # max_fails 允许请求失败的次数默认为1
            # down 表示单前的server暂时不参与负载.
            # backup: 其它所有的非backup机器down或者忙的时候,请求backup机器。所以这台机器压力会最轻。
            server 123.123.123.123 weight=3 fail_timeout:60s;
            server 321.321.312.311 weight=7;
        }
        
        #当配置多个server节点时,默认server names的缓存区大小就不够了,需要手动设置大一点
        server_names_hash_bucket_size 512;
        
        #动态加载模块化的server配置
        include      /usr/share/nginx/conf.d/*.conf;
        
        # server表示虚拟主机可以理解为一个站点,可以配置多个server节点搭建多个站点
        # 每一个请求进来确定使用哪个server由server_name确定
        # 当需要对同一端口监听多个域名时,使用如下配置,端口相同域名不同,server_name也可以使用正则进行配置
        # 但要注意server过多需要手动扩大server_names_hash_bucket_size缓存区大小
    	
        server {
            listen       80;
            server_name  localhost;
            #编码格式,避免url参数乱码
            #charset koi8-r;
            #access_log  logs/host.access.log  main;
    		
            #location用来匹配同一域名下多个URI的访问规则
            #比如动态资源如何跳转,静态资源如何跳转等
            #location后面跟着的/代表匹配规则
            location / {
            	#站点根目录,可以是相对路径,也可以使绝对路径
               root   http://myUpstream/usr/share/nginx/html;
               try_files $uri $uri/ /index.html;
            }
            
            # redirect server error pages to the static page /50x.html
            #error_page  404              /404.html;
            error_page   500 502 503 504  /50x.html;oot   html;
            
            }
            location /media/ {
                add_header Content-Encoding gzip;
                root /download/;  # 媒体文件位置
            }
            
            location /socket.io/ {
                proxy_pass http://myUpstream:5000/socket.io/;
                #拒绝请求,返回403,一般用于某些目录禁止访问
                #deny all;
                #允许请求
                #allow all;
                proxy_buffering off;
                proxy_http_version 1.1;
                proxy_set_header Upgrade $http_upgrade;
                proxy_set_header Connection "upgrade";
                proxy_set_header X-Real-IP $remote_addr;
                proxy_set_header Host $host;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                proxy_set_header Cookie $http_cookie;
                access_log off;
            }
        }
    
    	#负载均衡
       server {
            #监听端口
            listen  80;
            #域名可以有多个,用空格隔开
            server_name www.xxxx.com www.yyy.com;
            location / {
               proxy_pass http://myproject;
            }
       }
       
       # HTTP自动转发HTTPS
        server {
            listen 80;
            server_name www.域名.com;
            rewrite ^(.*) https://$server_name$1 permanent;
        }
        
        # 带SSL的配置
        server {
            listen 443;
            server_name www.域名.com;
            #编码格式,避免url参数乱码
            #charset koi8-r;
            root /projects/www;
    
            ssl on;
            # ssl证书地址
            ssl_certificate /etc/nginx/certs/server.crt;
            ssl_certificate_key /etc/nginx/certs/server.key; 
            #加密算法
            ssl_ciphers "ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA:ECDHE-RSA-AES128-SHA:ECDHE-RSA-DES-CBC3-SHA:AES256-GCM-SHA384:AES128-GCM-SHA256:AES256-SHA256:AES128-SHA256:AES256-SHA:AES128-SHA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!MD5:!PSK:!RC4";
            # 安全链接可选的加密协议
            ssl_protocols TLSv1 TLSv1.1 TLSv1.2 SSLv2 SSLv3;
            # 使用服务器端的首选算法
            ssl_prefer_server_ciphers on;
            # 设置存储session参数的缓存的类型和大小 较多的配置是built-in和shared同时使用
            # https://www.ioperat.com/news/operation/43.html推荐看这个,属于优化项
            ssl_session_cache builtin:1000 shared:SSL:10m;
            #缓存有效期
            ssl_session_timeout 5m;
            
            location / {
        		#依次查找对应uri地址资源 一般用于解决vue的history model
            	try_files $uri $uri/ /index.html;
            	index index.html index.htm;
            } 
            
            #访问域名指向这个ip的端口web服务(反向代理)
            location /api/ {
                proxy_pass  http://localhost:8080; #如果安装在别的服务器, 请填写它的ip
                proxy_buffering off;
                proxy_http_version 1.1;# HTTP 协议的版本
                # 设置一些代理的请求头,方便辨识
                proxy_set_header Upgrade $http_upgrade;
                proxy_set_header Connection $connection_upgrade;
                #后端的Web服务器可以通过X-Forwarded-For获取用户真实IP
                proxy_set_header X-Real-IP  $remote_addr;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                #端口
                proxy_set_header Host $host; 
                proxy_set_header X-Real-Port $server_port;
                proxy_set_header X-Real-Scheme $scheme;
            }
        }
    }
    

    nginx -s quit 优雅停止nginx,有连接时会等连接请求完成再杀死worker进程

    nginx -s reload 优雅重启,并重新载入配置文件nginx.conf

    nginx -s reopen 重新打开日志文件,一般用于切割日志

    nginx -v 查看版本

    nginx -t 检查nginx的配置文件

    nginx -h 查看帮助信息

    nginx -V 详细版本信息,包括编译参数

    nginx -c filename 指定配置文件

  • 相关阅读:
    选中实现jquery实现复选框checkbox全选(完善)
    对话框control在对话框picture control中利用opengl进行绘图
    nullnull数字对象的常用处理方法NSNumber
    androidclassListView的Item含有CheckBox时的处理
    绘图对话框基于MFC对话框的OpenGL三维图形开发
    组织学习【学习笔记】《卓有成效的管理者》 第三章 我能贡献什么
    集合元素并查集
    开源请求程序员的黄金时代
    客户端生成nginx webdav配置
    情况虚拟化实战虚拟化存储设计之三MultiPathing
  • 原文地址:https://www.cnblogs.com/alenghan/p/13221168.html
Copyright © 2020-2023  润新知