Nginx - Kuangcp/Note GitHub Wiki
目录 start
目录 end|2020-10-27 15:40|
- 安装
sudo apt install nginx
- 启动服务
sudo nginx
- 或者
sudo /etc/init.d/nginx start
- 或者 systemd 方式
systemctl start nginx
- 或者
- 关闭
sudo nginx -s quit
- 或者
sudo /etc/init.d/nginx stop
- 或者 systemd 方式
systemctl stop nginx
- 或者
不建议使用这种方式进行安装,很容易出现兼容问题
- 下载 nginx,pcre,zlib,openssl 的压缩包
- 进入解压根目录(按实际情况配置)
配置各个包
./configure --sbin-path=/usr/local/nginx/nginx \
--conf-path=/usr/local/nginx/nginx.conf \
--pid-path=/usr/local/nginx/nginx.pid \
--with-http_stub_status_module \
--with-http_ssl_module \
--with-pcre=/home/kuang/pcre-8.20 \
--with-openssl=/home/kuang/openssl \
--with-zlib=/home/kuang/zlib-1.2.11
-
-s signal
- stop 停止
- quit 退出
- reopen 重新打开
- reload 重载配置(修改配置文件常使用)
-
-t
测试配置文件
nginx 配置文件的语法是自己独有的语法, 比较像 shell, 里面有用到正则, 变量等概念
- 读取自定义目录配置:
- nginx.conf 中 http 块内添加
include /etc/nginx/conf.d/*.conf;
- nginx.conf 中 http 块内添加
- 错误页面重定向
error_page 404 /404.html;
也可以填完整URL
server {
client_max_body_size 4G;
listen 80;
# server_name static.me; # 如果需要使用域名 则需要在hosts文件配置
root /home/mini/Sync;
location / {
autoindex on; # 显示索引
autoindex_exact_size on; # 显示大小
autoindex_localtime on; # 显示时间
}
}
- 若出现403错误, 将 /etc/nginx/nginx.conf 中第一行的
user nginx;
改成可访问静态文件目录的用户即可 -
配置为文本文件类型
即 text/plain; 类型。例: 浏览器直接查看 code 目录下所有源代码
location /code/ {
# All files in it
location ~* {
add_header Content-Type text/plain;
}
}
如果有编码问题可配置成 add_header Content-Type 'text/plain;charset=UTF-8';
location ~* /.*\.(py|md|sql)${}
配置反向代理
- nginx 的 80 端口下:
/
路径的请求转发到9991端口/myth
转发到7898端口
upstream one {
server 127.0.0.1:9991;
}
upstream two {
server 127.0.0.1:7898;
}
server {
listen 80;
server_name 1.1.1.1;
location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forward-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_set_header X-Nginx-Proxt true;
proxy_pass http://one;
proxy_redirect off;
}
location /myth{
proxy_pass http://two;
proxy_redirect off;
}
}
自签发证书
命令运行
############ 证书颁发机构
# CA机构私钥
openssl genrsa -out ca.key 2048
# CA证书
openssl req -x509 -new -key ca.key -out ca.crt
############ 服务端
# 生成服务端私钥
openssl genrsa -out server.key 2048
# 生成服务端证书请求文件
openssl req -new -key server.key -out server.csr
# 使用CA证书生成服务端证书 关于sha256,默认使用的是sha1,在新版本的chrome中会被认为是不安全的,因为使用了过时的加密算法。
openssl x509 -req -sha256 -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial -days 3650 -out server.crt
# 打包服务端的资料为pkcs12格式(非必要,只是换一种格式存储上一步生成的证书) 生成过程中,需要创建访问密码,请记录下来。
openssl pkcs12 -export -in server.crt -inkey server.key -out server.pkcs12
配置HTTPS
upstream one {
server 127.0.0.1:8888;
}
server {
listen 443;
server_name web.me;
# 主要就是添加了这一块
ssl on;
ssl_certificate /data/https/server.crt;
ssl_certificate_key /data/https/server.key;
# http 转向 https
return 302 https://$host$request_uri;
location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forward-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_set_header X-Nginx-Proxt true;
proxy_pass https://one;
proxy_redirect off;
}
}
免费的网站, 并且现在支持泛域名了参考博客 | 参考博客
Nginx反向代理https
wget https://dl.eff.org/certbot-auto
chmod a+x certbot-auto
./certbot-auto #进行安装 但是过程中会有一些设置,
./certbot-auto certonly --email xxx@xxx --nginx -d xxx.domain # 生成 xxx.domain 证书
SSL 接收到一个超出最大准许长度的记录 要在端口后加上SSL nginx
upstream one {
server 127.0.0.1:8080;
}
server{
listen 443 ssl;
server_name xxx.domain
access_log /data/log/https.log;
# ssl配置
ssl on;
ssl_certificate /etc/letsencrypt/live/xxx.domain/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/xxx.domain/privkey.pem;
ssl_trusted_certificate /etc/letsencrypt/live/xxx.domain/chain.pem;
ssl_dhparam /etc/nginx/ssl/dhparam.pem;
location / {
proxy_pass https://one;
}
}
# 配置连接的配置信息
map $http_upgrade $connection_upgrade{
default upgrade;
'' close;
}
upstream back_end {
server 127.0.0.1:8888;
}
server {
listen 80;
server_name 127.0.0.1;
location / {
# 设置转发真实ip
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forward-For $proxy_add_x_forwarded_for;
proxy_set_header Host $host;
proxy_set_header X-Nginx-Proxt true;
# 设置接收到的请求类型
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
proxy_pass http://back_end;
# 默认是 1.0 不支持 keepAlive
proxy_http_version 1.1;
proxy_redirect off;
proxy_read_timeout 300s;
}
}
在需要被跨域访问的服务端,添加如下配置
add_header Access-Control-Allow-Origin *;
add_header Access-Control-Allow-Headers X-Requested-With;
add_header Access-Control-Allow-Methods GET,POST,OPTIONS;
配置静态端
server {
client_max_body_size 4G;
listen 80; # listen for ipv4; this line is default and implied
server_name static.me;
location / {
root /data/static;
}
location /api/ {
# add_header 'Access-Control-Allow-Origin' '*';
proxy_pass http://127.0.0.1:8889/; # 去除 api 路径,并访问后端
# proxy_pass http://127.0.0.1:8889; 这种方式不会去除 /api/
}
}
- 将静态文件交由Nginx进行处理, 后台的服务统一用一个前缀和前台进行区分, 然后将服务端的真实host和ip或者域名配置进来
- 这样在于前端看来就是访问 static.me/api 而已, 实际上访问的是 127.0.0.1:8889/api
注意,原先使用nginx反向代理tomcat,尝试配置后端为一个本地dns解析的域名。然后发现这是无法生效的,所以应该使用真实IP或公网域名
对标 F5 BIG-IP
Keepalived软件起初是专为LVS负载均衡软件设计的,用来管理并监控LVS集群系统中各个服务节点的状态,后来又加入了可以实现高可用的VRRP功能。因此,Keepalived除了能够管理LVS软件外,还可以作为其他服务(例如:Nginx、Haproxy、MySQL等)的高可用解决方案软件。
具有丰富的插件支持, 配置简洁, 自动配置 HTTPS证书,相较于nginx资源消耗更多 吞吐量低一些
Official 企业级工具
Github
基于 HAProxy
- 文件上传报错 413
- http{} 中添加
client_max_body_size 80M;
- http{} 中添加