官网下载
https://nginx.org/en/download.html

若是windows 安装,请下载windows版本即可。
我们这里下载的文件为 nginx-1.28.1.tar.gz
安装
将文件上传到安装目录(如:/opt/app/software)后执行如下命令
# 解压 $> cd /opt/app/software $> tar -zxvf nginx-1.28.1.tar.gz # 进入安装文件目录 $> cd nginx-1.28.1 # .configure $> ./configure --prefix=/opt/app/software/nginx --with-http_ssl_module $> make $> make install
–prefix 配置为安装目录,若不配置,则默认为 /usr/local/nginx ,configure 还有其他选项,可自行选择。参考官网:https://nginx.org/en/docs/configure.html
with-http_ssl_module 需要先安装 openssl ,必要时可以使用 --with-openssl=path 配置 openssl 的路径。
命令
启动
$> cd /opt/app/software/nginx/sbin $> ./nginx
查看 nginx 版本
$> cd /opt/app/software/nginx/sbin $> ./nginx -v
检查配置是否正确
$> cd /opt/app/software/nginx/sbin $> ./nginx -t
修改好配置后验证配置语法是否正确
停止
$> cd /opt/app/software/nginx/sbin $> ./nginx -s stop
查看 configure 参数
$> cd /opt/app/software/nginx/sbin $> ./nginx -v
在 nginx 升级时,此命令很有用,可以查看旧版本的 nginx 的 configure 参数,方便升级后使用同样的参数安装升级
重新加载配置
$> cd /opt/app/software/nginx/sbin $> ./nginx -s reload
常见配置问题
proxy_pass 路径后面的 /
# 配置一
location /test {
proxy_pass 'http://192.168.1.1:8080';
}
# 配置二
location /test {
proxy_pass 'http://192.168.1.1:8080/';
}
假如说我们要请求的后端接口是/test/demo/getlist
那么这两个配置会产生两个截然不同的请求结果:
- http://192.186.0.1:8080/test/demo/getlist (匹配配置一)
- http://192.186.0.1:8080/demo/getlist (匹配配置二)
区别就在于是否保留了/test这个路径前缀,proxy_pass 后面的这个/,它表示去除/test前缀。
location 上的 /
# 配置一
location /test {
proxy_pass 'http://192.168.1.1:8080';
}
# 配置二
location /test/ {
proxy_pass 'http://192.168.1.1:8080';
}
- /test是前配置,表示匹配/test以及/test/开头的路径,比如 /test/demo/getlist,/testxxx等都会被匹配到。
- /test/是更精准的匹配,表示只匹配以/test/开头的路径,比如/test/demo/getlist会被匹配到,但 /test123、/test 不会被匹配到。(推荐使用此方式,严格规定上下文)
nginx 配置示例
# 指定工作进程的用户(不论用什么账号执行),如不设置,则使用执行启动命令的账号
user root;
# 工作进程数量(可设置为cpu数量)
worker_processes 2;
# 错误日志
error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
# pid 文件
pid logs/nginx.pid;
# 事件区块
events {
# 单个进程最大连接数(整体最大连接数=worker_connections*worker_processes)
worker_connections 1024;
}
# http 块,用于配置 http 服务相关参数,如:文件类型映射、日志记录、gzip压缩 等
http {
#include:导入外部文件mime.types,将所有types提取为文件,然后导入到nginx配置文件中
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"';
# 访问日志
access_log logs/access.log;
# 开启高效文件传输模式。推荐设置为 on
sendfile on;
# 连接超时时间,单位为秒
keepalive_timeout 65;
# 开启 gizp
gzip on;
# 关闭错误页中的版本提示
server_tokens off;
# allow 白名单,deny 黑名单
# 设置白名单
allow 123.13.123.12;
allow 23.53.32.1/100;
# 拒绝其他所有访问
deny all;
# upstream 配负载均衡
# 测试环境
upstream test_server{
server 192.168.1.1:8180;
# 健康检查设置
server 192.168.1.1:8180 max_fails=3 fail_timeout=30s;
}
# 开发环境
upstream dev_server{
server 192.168.1.2:8180;
# 健康检查设置
server 192.168.1.2:8180 max_fails=3 fail_timeout=30s;
}
server {
# server 监听端口
listen 80;
# 提供服务的域名主机名
server_name localhost;
# 设置字符集(整个 server 下生效)
charset utf-8;
# 当前 server 的访问日志
# access_log logs/access_80.log;
location / {
root html;
index index.html index.htm;
}
location ^~ /test/ {
proxy_pass http://test_server/test/;
proxy_set_header host $host;
proxy_set_header x-real-ip $remote_addr;
proxy_set_header x-forwarded-for $proxy_add_x_forwarded_for;
proxy_set_header x-forwarded-proto $scheme;
}
location ^~ /admin-test/ {
proxy_pass http://192.168.1.1:8090/admin-test/;
proxy_set_header host $host;
proxy_set_header x-real-ip $remote_addr;
proxy_set_header x-forwarded-for $proxy_add_x_forwarded_for;
proxy_set_header x-forwarded-proto $scheme;
}
location ^~ /dev/ {
proxy_pass http://dev_server/dev/;
proxy_set_header host $host;
proxy_set_header x-real-ip $remote_addr;
proxy_set_header x-forwarded-for $proxy_add_x_forwarded_for;
proxy_set_header x-forwarded-proto $scheme;
}
location ^~ /admin-dev/ {
proxy_pass http://192.168.1.2:8090/admin-dev/;
proxy_set_header host $host;
proxy_set_header x-real-ip $remote_addr;
proxy_set_header x-forwarded-for $proxy_add_x_forwarded_for;
proxy_set_header x-forwarded-proto $scheme;
}
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。
发表评论