nginx安装使用

作为一个新手运维,学习过程中网上很多文章根本无法贴合实际,现在我写这个文章的目的只是为了让新入门和没有运维的朋友不用再走弯路。

一、基础安装

1、安装依赖

yum -y install gcc gcc-c++ zlib zlib-devel openssl openssl-devel pcre* glibc-devel.x86_64

2、下载安装包

下载地址 nginx news

3、解压修改,屏蔽版本号(实际使用中,经常会被漏扫,只要又版本号泄露,都会让整改)

tar -zxvf nginx-1.23.4.tar.gz

注:我使用的是版本是1.23.4实际情况根据自身下载对应版本

cd nginx-1.23.4

vim  src/http/ngx_http_header_filter_module.c

注:修改位置大概在49行

将nginx删除

注:小技巧 vim打开文件后按a键进行修改esc退出修改,按 :set nu 显示行数,修改完成后执行 :wq保存退出,修改后发现修改错误想要不保存 :q!

vim src/http/ngx_http_special_response.c

注:修改位置在36行

  1. 编译安装

   ./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module

注:--prefix= 表示编译后nginx所在目录,可以自定义,如--prefix=/data/nginx 。

显示下面信息表示上述命令执行成功

再次执行

make && make install

上述执行后表示安装成功。

  • 实际操作修改(内容适用于实际使用情况、在这里的配置可以让你解决实际使用过程中,百分之八十的问题)
  1. 将nginx添加到开机自动启动

vim /etc/systemd/system/nginx.service

[Unit]

Description=The nginx HTTP and reverse proxy server

After=syslog.target network.target remote-fs.target nss-lookup.target

[Service]

Type=forking

PIDFile=/usr/local/nginx/logs/nginx.pid

ExecStartPre=/usr/local/nginx/sbin/nginx -t

ExecStart=/usr/local/nginx/sbin/nginx

ExecReload=/usr/local/nginx/sbin/nginx -s reload

ExecStop=/usr/local/nginx/sbin/nginx -s stop

PrivateTmp=true

[Install]

WantedBy=multi-user.target

注:上述内容添加后

执行下面命令,将nginx添加到服务中

systemctl daemon-reload

systemctl enable nginx

注:sytemctl  start  nginx (启动nginx)、sytemctl  stop  nginx (启动nginx)、sytemctl  status  nginx (查看nginx状态)

  1. 修改nginx配置文件

vim /usr/local/nginx/conf/nginx.conf

user  root;

worker_processes  4;

error_log  logs/error.log;

events {

    worker_connections  65535;

}

http {

    include       mime.types;

    default_type  application/octet-stream;

    #修改了nginx输出方式,改为了json格式,方便后面日志的分割

    log_format upstreaminfo escape=json '{"remote_addr": "$remote_addr","remote_user": "$remote_user","time_iso8601": "$time_iso8601","request": "$request","status": "$status","body_bytes_sent": "$body_bytes_sent","http_referer": "$http_referer","http_host": "$http_host","upstream_status": "$upstream_status","http_cookie": "$http_cookie","request_body": "$request_body","http_user_agent": "$http_user_agent","http_x_forwarded_for": "$http_x_forwarded_for","request_time": "$request_time","upstream_response_time": "$upstream_response_time"}';    

server_names_hash_bucket_size 128;

    underscores_in_headers on;

    sendfile        off;

#屏蔽nginx版本号

server_tokens off;

#nginx限制了文件上传的大小,默认是1M

    client_max_body_size 10M;

    keepalive_timeout  65;

    client_header_buffer_size 512k;

    large_client_header_buffers 4 1024k;

    proxy_buffer_size 128k;

    proxy_buffers   32 128k;

    proxy_busy_buffers_size 128k;

#nginx支持websocket

map $http_upgrade $connection_upgrade {

    default upgrade;

    '' close;

    }

#nginx支持websocket

  map $http_x_forwarded_proto $thescheme {

        default $scheme;

        http https;

    }

    #nginx作为反向代理服务器,可能会配置多个域名(地址),方便后面管理,配置不同的域名对应不同的文件

    include /usr/local/nginx/conf/conf.c/*.conf;

}

创建nginx配置文件路径,添加基础配置文件

mkdir  /usr/local/nginx/conf/conf.c/

cd  /usr/local/nginx/conf/conf.c/

vim localhost.conf

server {

       listen 80;

       server_name localhost;

       location / {

         root html;

         index index.html;

       }

}

注:修改后需要重启nginx ,重启前执行 /usr/local/nginx/sbin/nginx  -t 检查配置文件是否正确

执行  systemctl restart nginx 重启nginx

检查nginx是否正常,版本号是否隐藏,server处版本号已经隐藏

  1. 配置支持https的nginx配置

创建ssl证书存放位置,并将ssl文件放到改路径下

mkdir /usr/local/nginx/cert

创建一个https文件

vim www.xxx.com.conf

注:文件名可以随便起结尾必须是 .conf

server {

                listen 443 ssl;

                server_name www.xxx.com ;

                ssl_certificate   /usr/local/nginx/cert/www.xxx.com.pem;

                ssl_certificate_key  /usr/local/nginx/cert/www.xxx.com.key;

                ssl_session_timeout 5m;

                ssl_ciphers "ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA:ECDHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES128-SHA256:DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES256-GCM-SHA384:AES128-GCM-SHA256:AES256-SHA256:AES128-SHA256:AES256-SHA:AES128-SHA:DES-CBC3-SHA:HIGH:!aNULL:!eNULL:!EXPORT:!DES:!MD5:!PSK:!RC4:!3DES";

                #注 TLSv1 TLSv1.1 SSLv2 SSLv3会有漏洞不支持使用

ssl_protocols  TLSv1.2 ;

                ssl_prefer_server_ciphers on;

                charset utf-8;

               #nginx日志会一直增加,查看起来十分麻烦,很难快速定位到,使用下面方法切割日志

                if ($time_iso8601 ~ "^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2})") {

                   set $year $1;

                   set $month $2;

                   set $day $3;

                   set $hour $4;

                   set $minutes $5;

                   set $seconds $6;

                }

                #日志输出位置,按照年_月_日_小时分割               

                access_log /usr/local/nginx/logs/${year}_${month}_${day}_${hour}_www.xxx.com.log  upstreaminfo;

               #安全防护,屏蔽特殊文件、路径,防止被黑

if ($request_uri ~ doc.html|git|web.config|swagger-ui.html|druid|actuator) {

                   return 403;

                }

               #将具体的配置文件指向 .item文件中,可以实现入口地址使用同一个代理地址

               include /usr/local/nginx/conf/conf.c/www.xxx.com.item;

        }

  1. nginx反向代理实际使用中会遇到的各种写法

    #指向根目录

location / {

         root html;

         index index.html;

}

#指向一个具体的文件路径但是不想将入口传递给下一层,访问时不会讲www这个路径传递给下一层,造成查找/usr/local/nginx/pown/test/www目录,而是直接访问/usr/local/nginx/pown/test/ 的根目录 

location /www {

         alias /usr/local/nginx/pown/test/;

         index index.html;

}

#若依框架页面配置

location /www {

         alias /usr/local/nginx/pown/www /;

         try_files $uri $uri/  /www /index.html;

         index index.html;

}

#反向代理一个接口地址

location  /test-api  {

  proxy_pass http://localhost:31982;

  #如果接口是websocket,需要添加

  proxy_set_header Upgrade $http_upgrade;

  #如果接口是websocket,需要添加

  proxy_set_header Connection $connection_upgrade;

  proxy_set_header X-Real-IP $remote_addr;

  proxy_set_header X-Forwarded-Host $http_host;

  proxy_set_header X-Forwarded-Port $server_port;

  proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

  proxy_set_header X-Forwarded-Proto  $scheme;

  #限制接口文件上传大小,默认是1M

  client_max_body_size 50M;

 }

注:proxy_pass http://localhost:31982后面加斜杠和不加斜杠是有区别的,加斜杠不会将location  /test-api /test-api 传递给http://localhost:31982,只会将后面的内容传递给http://localhost:31982,如访问https://www.xxx.com/test-api/www,后端收到的请求是http://localhost:31982/www;反之没有添加斜杠后端收到的请求如下:http://localhost:31982/test-api/www。

  1. nginx负载均衡

   在nginx.conf 文件中添加

   upstream www {

     server 192.168.1.100:18001 weight=1 max_fails=2 fail_timeout=5s;

     server 192.168.1.101:18001 weight=1 max_fails=2 fail_timeout=5s;

}

注:upstream www中www可以自定义;server表示具体的服务地址,可以是多个;weight表示权重,可以简单的理解为1:1 分配,max_fails和fail_timeout配套使用,上面参数表示如果5秒钟如果失败2次,那么将暂停该server 5秒。

在具体配置中添加

location  /test-api  {

  #使用负载均衡功能,proxy_pass 将不再是具体的地址而是upstream 中定义的名称

  proxy_pass http://www;

  #如果接口是websocket,需要添加

  proxy_set_header Upgrade $http_upgrade;

  #如果接口是websocket,需要添加

  proxy_set_header Connection $connection_upgrade;

  proxy_set_header X-Real-IP $remote_addr;

  proxy_set_header X-Forwarded-Host $http_host;

  proxy_set_header X-Forwarded-Port $server_port;

  proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

  proxy_set_header X-Forwarded-Proto  $scheme;

  #限制接口文件上传大小,默认是1M

  client_max_body_size 50M;

 }

  1. 特殊负载均衡ip_hash

   upstream www {

     ip_hash

     server 192.168.1.100:18001 weight=1 max_fails=2 fail_timeout=5s;

     server 192.168.1.101:18001 weight=1 max_fails=2 fail_timeout=5s;

}

ip_hash表示将同一个源IP的请求指向到同一个server地址,在有共享seesion的情况下进行此特殊配置,其他情况下不需要。使用ip_hash 会导致负载不是很平均。

     

  • 61
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值