一、基础安装
1、安装依赖
yum -y install gcc gcc-c++ zlib zlib-devel openssl openssl-devel pcre* glibc-devel.x86_64
2、下载安装包
下载地址 https://nginx.org/
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行
- 编译安装
./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module
注:--prefix= 表示编译后nginx所在目录,可以自定义,如--prefix=/data/nginx 。
显示下面信息表示上述命令执行成功
再次执行
make && make install
上述执行后表示安装成功。
- 实际操作修改(内容适用于实际使用情况、在这里的配置可以让你解决实际使用过程中,百分之八十的问题)
- 将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状态)
- 修改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处版本号已经隐藏
- 配置支持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;
}
- 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。
- 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;
}
- 特殊负载均衡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 会导致负载不是很平均。
标签:www,set,http,nginx,proxy,篇章,usr From: https://www.cnblogs.com/jiachong1994/p/18260608