Skip to main content

install

building-from-source

# ./configure --prefix=/usr/local/bin/nginx-1.28.0 安装位置不能和源码一个位置
sudo ./configure --prefix=/usr/local/nginx
make
sudo make install

sudo /usr/local/nginx/sbin/nginx 访问127.0.0.1:80

1. libpcre3-dev

作用:提供正则表达式支持 pcre 代表 Perl Compatible Regular Expressions(Perl 兼容的正则表达式)。

Nginx 中的应用: Nginx 核心功能需要使用正则表达式来匹配和处理 URL、URI、域名、Location 路径等。 例如,在 Nginx 配置中使用 location ~ .(png|jpg|gif)$ 这样的语句时,就需要 PCRE 库来解析和执行这个正则表达式。

-dev 后缀: 带有 -dev 后缀的包是开发库(Development Libraries),它包含了头文件(.h 文件)和静态库/链接信息。 这些是编译 Nginx 源码时,编译器用来查找和链接 PCRE 功能所必需的文件。

总结: 提供了 Nginx 灵活的 URL 路由和配置匹配能力。

2. zlib1g-dev

作用:提供数据压缩支持 zlib 是一个广泛用于数据压缩的库,它实现了著名的 DEFLATE 压缩算法。

Nginx 中的应用: Nginx 使用 zlib 来实现 Gzip 压缩功能。

当 Nginx 开启 Gzip 压缩后,它会压缩返回给客户端的文本内容(HTML、CSS、JavaScript)。

这可以显著减少网络传输的数据量,从而加快网页加载速度,节省带宽。

-dev 后缀: 同样,这个开发库提供了 zlib 的头文件和链接库,供 Nginx 在编译时集成压缩功能。

总结: 提供了 Nginx 优化网络性能和节省带宽的能力。

libssl-dev

libssl-dev 是一个提供 加密、安全通信和证书管理 功能的开发工具包,是构建安全网络服务的基石

arch

sudo pacman -Syu
sudo pacman -S nginx-mainline

arch 安装默认打开首页是404,当 root 设置为 html 时,Nginx 会相对于它的安装前缀目录(Prefix)来寻找。 在 Arch 上,这个前缀通常是 /etc/nginx/。 所以 Nginx 实际上在尝试访问 :/etc/nginx/html/index.html。 而 Arch 的默认网页文件其实存放在:/usr/share/nginx/html/

一般推荐放到/var/www/ 下

推荐流程

# 创建站点存放目录
sudo mkdir -p /var/www/hmdp/public

sudo chown -R ${USER}:http /var/www/hmdp
# 设置目录权限为 755,文件权限为 644
find /var/www/hmdp -type d -exec chmod 755 {} +
find /var/www/hmdp -type f -exec chmod 644 {} +

fd -t d . /var/www/hmdp -x chmod 755
fd -t f . /var/www/hmdp -x chmod 644

sudo mkdir -p /etc/nginx/sites-available
sudo mkdir -p /etc/nginx/sites-enabled
vim /etc/nginx/nginx.conf

http {
include mime.types;
default_type application/octet-stream;

# 优化项
server_tokens off; # 隐藏版本号更安全
types_hash_max_size 4096;

# 包含自定义站点配置
include sites-enabled/*;
}
vim /etc/nginx/sites-available/hmdp.conf
server {
listen 90;
listen [::]:90;
server_name localhost; # 生产环境换成域名

root /var/www/hmdp/public/hmdp;
index index.html;

# 日志配置 (放在 /var/log/nginx/)
access_log /var/log/nginx/hmdp.access.log;
error_log /var/log/nginx/hmdp.error.log;

# 静态资源缓存策略
location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {
expires 30d;
add_header Cache-Control "public, no-transform";
}

# 禁止访问敏感隐藏文件 (如 .git)
location ~ /\. {
deny all;
}

location / {
try_files $uri $uri/ =404;
}

location /api {
default_type application/json;
#internal;
keepalive_timeout 30s;
keepalive_requests 1000;
#支持keep-alive
proxy_http_version 1.1;
rewrite /api(/.*) $1 break;
proxy_pass_request_headers on;
#more_clear_input_headers Accept-Encoding;
proxy_next_upstream error timeout;
proxy_pass http://127.0.0.1:8081;
#proxy_pass http://backend;
}

}
upstream backend {
server 127.0.0.1:8081 max_fails=5 fail_timeout=10s weight=1;
#server 127.0.0.1:8082 max_fails=5 fail_timeout=10s weight=1;
}

sudo ln -s /etc/nginx/sites-available/my_site.conf /etc/nginx/sites-enabled/
sudo nginx -t # 看到 syntax is ok 即成功
sudo systemctl reload nginx # 平滑重载
sudo nginx -s reload 重新加载 不用重启

nignx -t 检查nginx配置文件有没有错误,检查完在启动,如果有错误直接启动会导致旧的nginx直接挂掉 reload Nginx 的 Master 进程会先加载新配置,确认无误后,会开启新的 Worker 进程,并通知旧的 Worker 进程在处理完手头当前的请求后自动退出