CentOS7 源码安装Nginx

官网地址:https://nginx.org/

开源地址:https://github.com/nginx/nginx

一、Nginx概念

Nginx是一款开源的高性能Web服务器和反向代理服务器,常用于处理静态内容和负载均衡。它支持多种协议,如HTTP、HTTPS和SMTP,能够高效处理大量并发连接,适合高流量的网站。

Nginx的主要功能包括:

  • 反向代理:可以将请求转发到后端服务器,负载均衡,提高网站性能和可用性。
  • 静态文件服务:高效处理静态内容,如图片、CSS和JavaScript文件,减少服务器负担。
  • 负载均衡:支持多种负载均衡算法(如轮询、最少连接等),帮助分散流量。
  • SSL/TLS支持:提供安全的HTTPS服务,保障数据传输安全。
  • 高并发处理:使用事件驱动架构,能够同时处理成千上万的连接,适合大规模应用。

二、安装Nginx

这里以安装 1.21.6 版本为例。

1.下载并解压nginx源码包

安装构建工具和依赖项:

yum install -y wget make gcc gcc-c++ pcre-devel openssl-devel geoip-devel zlib-devel

下载 nginx 源码包并解压:

cd /usr/local/src
wget http://nginx.org/download/nginx-1.21.6.tar.gz
tar -zxvf nginx-1.21.6.tar.gz
cd nginx-1.21.6

2.创建nginx用户

创建了一个名为 nginx 的用户,并将其登录 shell 设置为 /sbin/nologin,即无法登录系统,主要用于编译安装 nginx:

useradd -r -s /sbin/nologin -M nginx

3.编译并安装nginx

在编译OpenSSL时,指定安装路径,这里安装到/usr/local/nginx

./configure \
--prefix=/usr/local/nginx \
--user=nginx \
--group=nginx \
--with-compat \
--with-file-aio \
--with-threads \
--with-http_addition_module \
--with-http_auth_request_module \
--with-http_dav_module \
--with-http_flv_module \
--with-http_gunzip_module \
--with-http_gzip_static_module \
--with-http_mp4_module \
--with-http_random_index_module \
--with-http_realip_module \
--with-http_secure_link_module \
--with-http_slice_module \
--with-http_ssl_module \
--with-http_stub_status_module \
--with-http_sub_module \
--with-http_v2_module \
--with-stream \
--with-stream_realip_module \
--with-stream_ssl_module \
--with-stream_ssl_preread_module \
--with-stream_geoip_module \
--with-mail \
--with-mail_ssl_module

开始编译nginx源码并安装nginx

make -j $(nproc)
make install

4.验证nginx版本

进入nginx安装目录,执行以下命令验证:

cd /usr/local/nginx
./sbin/nginx -V

# 显示版本信息
nginx version: nginx/1.21.6
built by gcc 4.8.5 20150623 (Red Hat 4.8.5-44) (GCC) 
built with OpenSSL 1.0.2k-fips  26 Jan 2017
TLS SNI support enabled
configure arguments: --prefix=/usr/local/nginx --user=nginx --group=nginx --with-compat --with-file-aio --with-threads --with-http_addition_module --with-http_auth_request_module --with-http_dav_module --with-http_flv_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_mp4_module --with-http_random_index_module --with-http_realip_module --with-http_secure_link_module --with-http_slice_module --with-http_ssl_module --with-http_stub_status_module --with-http_sub_module --with-http_v2_module --with-stream --with-stream_realip_module --with-stream_ssl_module --with-stream_ssl_preread_module --with-stream_geoip_module --with-mail --with-mail_ssl_module

5.临时启动Nginx

/usr/local/nginx/sbin/nginx -t  		# 检查配置文件是否正确
/usr/local/nginx/sbin/nginx 			# 启动 Nginx
/usr/local/nginx/sbin/nginx -s quit		# 优雅地停止 Nginx,然后手动启动
/usr/local/nginx/sbin/nginx -s reload	# 重载nginx


# 如创建了软链接则可以使用软连接启动 ln -s /usr/local/nginx/sbin/nginx /usr/bin/nginx
/usr/bin/nginx -s quit   	# 优雅地停止 Nginx,然后手动启动
/usr/bin/nginx           	# 启动 Nginx
/usr/bin/nginx -s reload  	# 先尝试重载配置,如果失败再重新启动
/usr/bin/nginx -t			# 检查配置文件是否正确

三、配置Nginx

1.创建nginx软链接

ln -s /usr/local/nginx/sbin/nginx /usr/bin/nginx

2.修改nginx配置文件

在 Nginx 安装目录的 conf 目录中,nginx.conf 是 Nginx 的主配置文件,这里以基础的配置文件内容参考为例:

cat > /usr/local/nginx/conf/nginx.conf <<'EOF'
user nginx;
worker_processes auto;

events {
    worker_connections 1024;
}

http {
    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 main;
    error_log   logs/error.log; 

    sendfile     on;
    tcp_nopush   on;
    tcp_nodelay  on;

    keepalive_timeout  65;
    
    gzip  on;
    gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;

    server_tokens off;

    server {
        listen 80;
        server_name localhost;

        location / {
            root html;
            index index.html index.htm;
        }

        error_page 500 502 503 504 /50x.html;
        location = /50x.html {
            root html;
        }

    }

    include conf.d/*.conf;
}
EOF

**注:**如果默认端口被占用,修改其他端口即可。

解释说明:

  • worker_processes auto:自动设置工作进程数。
  • worker_connections 1024:每个工作进程最大连接数。
  • include mime.types:包含MIME类型。
  • default_type application/octet-stream:默认类型。
  • sendfile on:启用高效文件传输
  • tcp_nopush on:优化TCP传输
  • tcp_nodelay on:禁用延迟
  • keepalive_timeout 65:长连接超时时间。
  • gzip on:启用gzip压缩。
  • gzip_types ......:压缩的MIME类型。

这里配置完成后,如果直接重载 nginx,会报错:

# 校验配置文件语法
nginx -t

# 重载nginx
nginx -s reload
# 显示报错信息如下
nginx: [error] invalid PID number "" in "/var/run/nginx.pid"

由于配置了 include conf.d/*.conf,因此需要在 Nginx 安装目录下的 conf 目录中创建对应的 conf.d 目录,主要存放于独立的配置文件信息:

mkdir -p /usr/local/nginx/conf/conf.d

3.配置启动服务

创建一个名为 nginx.service 的 systemd 服务单元文件,用于管理 Nginx 服务,存放于/etc/systemd/system目录下,并添加以下内容:

cat > /etc/systemd/system/nginx.service <<'EOF'
[Unit]
Description=The nginx HTTP and reverse proxy server
After=network.target remote-fs.target nss-lookup.target

[Service]
Type=forking
ExecStart=/usr/sbin/nginx
ExecReload=/usr/sbin/nginx -s reload
ExecStop=/usr/sbin/nginx -s quit
PrivateTmp=true

[Install]
WantedBy=multi-user.target
EOF

服务单元文件配置详解:

这是一个 systemd 服务单元文件,用于管理和配置 Nginx 服务。systemd 是一个 Linux 系统的初始化系统和服务管理器,它管理和配置系统启动后运行的服务。这个文件的主要部分包括 UnitServiceInstall

  • [Unit] 部分包含了服务的描述和依赖关系:
    • Description:服务的描述,这里是 “The NGINX HTTP and reverse proxy server”。
    • After:这个指定了服务的启动顺序。这里,Nginx 会在 network.target(网络服务)、remote-fs.target(远程文件系统)和 nss-lookup.target(名字服务解析)之后启动。
  • [Service] 部分定义了服务的启动、停止和重载的命令以及其他相关设置:
    • Type=forking:这意味着这个服务会创建一个或多个子进程。
    • ExecStart:启动服务的命令。
    • ExecReload:重新加载服务的命令。
    • ExecStop:停止服务的命令。
    • PrivateTmp=true:这是一个安全选项,如果设置为 true,则此服务将有一个独立的临时目录,与其他服务和用户隔离。
  • [Install] 部分用于定义如何 ‘安装’ 这个服务:
    • WantedBy:这个指定了哪个目标需要这个服务。这里,multi-user.target 是一个常见的目标,它表示多用户环境。

4.启动nginx服务

配置完成后,启动Nginx服务:

systemctl start nginx
# 查看Nginx服务状态
systemctl status nginx
# 设置开机自启服务
systemctl enable nginx
# 重启服务
systemctl restart nginx

四、访问Nginx

浏览器访问 http://<IP>,会显示 Nginx 的默认欢迎页面:

image-20240824004207300

五、使用nginx

1.配置nginx反向代理示例

假设需要配置一个通过SSL域名去反向代理,在 /usr/local/nginx/conf/conf.d 目录下创建一个虚拟主机配置文件,其内容如下:

server {
    listen 443 ssl http2;
    server_name searx.jerion.cn;

    ssl_certificate /etc/ssl/certs/searx.jerion.cn/searx.jerion.cn.pem;
    ssl_certificate_key /etc/ssl/certs/searx.jerion.cn/searx.jerion.cn.key;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3;

    location / {
        proxy_pass http://10.22.51.65:7780;
        proxy_set_header Host $http_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-Host $http_host;
        proxy_set_header X-Forwarded-Port $server_port;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

配置完成后,重载nginx服务即可:

nginx -t
nginx -s reload

2.配置nginx隐藏http头部中的nginx版本号

正常情况下,当访问nginx出现403情况时,下方的nginx会显示出版本号:

image-20241011002501566

在 Nginx 配置中使用 server_tokens off; 语句可以隐藏 HTTP 头部中的 Nginx 版本号,这是一个提高安全性的措施,防止攻击者通过版本号识别潜在的漏洞。

下面是如何在 Nginx 配置中使用 server_tokens off; 的步骤:

  1. 打开 Nginx 配置文件:通常配置文件位于 /etc/nginx/nginx.conf/etc/nginx/conf.d/ 目录下,但具体位置可能根据你的安装而有所不同。

  2. 编辑配置文件:找到 http 块,然后添加 server_tokens off; 语句。例如:

    http {
        server_tokens off;
    
        # 其他配置项
    }
    
  3. 保存并关闭文件

  4. 重新加载 Nginx 配置:使配置更改生效,需要重新加载 Nginx,使用以下命令:

    nginx -s reload
    

这样设置之后,Nginx 在 HTTP 头部中将不再显示版本号:

image-20241011002527146

六、扩展知识

在实践案例中,我们了解了如何通过源码编译的方式在 CentOS 7 上安装和配置 Nginx。除了上述示例中的步骤,还有一些其他值得注意的知识点:

  • Nginx 配置文件:Nginx 的主要配置文件位于 /usr/local/nginx/conf/nginx.conf,你可以根据需要进行修改和定制。
  • 虚拟主机配置:Nginx 支持虚拟主机,可以在配置文件中添加多个 server 块来配置不同的虚拟主机。
  • HTTPS 配置:如果需要启用 HTTPS 支持,可以在 Nginx 配置文件中配置 SSL 证书和密钥,并将监听端口改为 443。
  • 性能优化:Nginx 以其高性能而闻名,但在实际应用中,还可以进行一些性能优化的配置,例如启用缓存、调整工作进程数等。

总之,通过源码编译安装 Nginx 可以获得更高的灵活性和定制性。Nginx 是一个功能强大的 Web 服务器,适用于各种规模的网站和应用场景。

七、相关问题

**systemctl reload nginxsystemctl restart nginxnginx -s reload:**这三条命令都用于管理和控制 Nginx 服务,但它们有不同的作用和使用场景。以下是每条命令的详细解释及其显著区别:

1.详细解释

  • systemctl reload nginx

    • 作用:重新加载 Nginx 服务。

    • 描述:该命令会通知 Nginx 重新加载其配置文件,而不停止服务。这意味着任何新的配置更改将被应用,但现有的连接不会被中断。

    • 使用场景:当你对 Nginx 的配置文件做了更改,并希望应用这些更改而不中断当前连接时使用。

  • systemctl restart nginx

    • 作用:重启 Nginx 服务。

    • 描述:该命令会停止 Nginx 服务并立即重新启动它。这会导致所有当前连接中断。

    • 使用场景:当你需要完全重新启动 Nginx 服务,比如安装了新的模块或补丁,或需要解决一些服务异常问题时使用。

  • nginx -s reload

    • 作用:使用 Nginx 自带的控制信号重新加载配置。

    • 描述:该命令发送 SIGHUP 信号给 Nginx 主进程,告诉它重新加载配置文件。这与 systemctl reload nginx 的效果相同,即应用新的配置而不中断服务。

    • 使用场景:与 systemctl reload nginx 相同,当你对 Nginx 配置文件进行了修改并希望应用这些更改而不中断当前连接时使用。

2.区别总结

  • systemctl reload nginxnginx -s reload 都用于重新加载 Nginx 配置文件,但 systemctl reload nginx 是通过 systemd 来管理服务的,而 nginx -s reload 是直接向 Nginx 进程发送信号。
  • systemctl restart nginx 用于完全重启 Nginx 服务,会导致服务中断,适用于需要彻底重启服务的情况。
  • nginx -s reloadsystemctl reload nginx 都不会中断当前连接,而 systemctl restart nginx 会中断所有连接。

3.推荐使用场景

  • 应用配置更改systemctl reload nginxnginx -s reload
  • 完全重启服务systemctl restart nginx
### CentOS 7 源码编译安装 Nginx 教程 #### 准备工作 为了顺利进行Nginx源码编译安装,需要先准备好必要的开发工具和库文件。这一步骤确保了后续编译过程不会因为缺少依赖而失败。 ```bash yum -y install gcc gcc-c++ wget automake autoconf libtool libxml2-devel libxslt-devel perl-devel perl-ExtUtils-Embed pcre-devel openssl openssl-devel zlib-devel[^3] ``` #### 下载并解压Nginx源码包 获取最新稳定版的Nginx压缩包,并将其放置于服务器上的合适位置以便处理。 ```bash wget https://nginx.org/download/nginx-1.26.2.tar.gz tar -zxvf nginx-1.26.2.tar.gz cd nginx-1.26.2/ ``` #### 配置编译选项 根据实际需求调整`./configure`命令中的参数来定制化构建环境。这里给出的是一个较为通用的例子: ```bash ./configure --prefix=/usr/local/nginx \ --sbin-path=/usr/sbin/nginx \ --conf-path=/etc/nginx/nginx.conf \ --error-log-path=/var/log/nginx/error.log \ --http-log-path=/var/log/nginx/access.log \ --with-http_ssl_module \ --with-pcre ``` 此部分设置指定了Nginx的主要路径以及启用SSL支持等功能模块[^4]。 #### 执行编译与安装 完成上述准备工作之后就可以正式开始编译和安装流程了。注意,在执行这些指令前应当确认当前处于解压后的Nginx源代码根目录下。 ```bash make && make install ``` 如果一切正常,则表示已经成功完成了Nginx的服务端程序部署[^2]。 #### 启动服务测试 为了让新安装Nginx能够被方便地调用,可以创建指向可执行文件的符号链接;接着启动Web服务器验证其能否正确响应请求。 ```bash ln -s /usr/local/nginx/sbin/nginx /usr/bin/nginx nginx ps aux | grep nginx ``` 最后可以通过浏览器或其他HTTP客户端访问本机IP地址查看默认欢迎页面以检验整个安装过程是否顺利完成。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值