CentOS7 安装 Nginx,设置自启动及站点配置

一、下载、编译和安装

编译准备工作,升级版本库

yum -y install gcc-c++
yum -y install pcre
yum -y install pcre-devel
yum -y install zlib 
yum -y install zlib-devel
yum -y install openssl openssl-devel

下载最新的文档版本包:nginx-1.22.1.tar.gz 上传到服务器 /usr/local 目录,解压缩重命名:nginx_src

cd /usr/local/
tar -xzvf nginx-1.22.1.tar.gz
mv nginx-1.22.1 nginx_src

进入源文件目录,安装相关组件,并进行编译和安装:

cd nginx_src
[配置SSL参数]
./configure --with-http_ssl_module

[编译和安装]
make
make install

 

二、系统自启动及服务化脚本

编写服务脚本:

cd /etc/systemd/system
vim nginx.service

内容如下:

[Unit]
Description=Nginx
After=nginx.service

[Service]
Type=forking
ExecStart=/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
ExecStop=/usr/local/nginx/sbin/nginx -s stop
ExecReload=/usr/local/nginx/sbin/nginx -s reload

[Install]
WantedBy=multi-user.target

注:其中Exec部分内容,更换成实际的nginx运行目录。

执行命令:

#重新加载服务列表
systemctl daemon-reload

# 开启自启
systemctl enable nginx.service

# 启动、重启、停止
systemctl start|reload|stop nginx

 

三、参数配置文件

Nginx的参数文件默认路径在运行目录下的conf目录中,文件名为:nginx.conf

大致配置如下:

worker_processes  auto;
events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream; sendfile on; keepalive_timeout 65; server_tokens off; proxy_hide_header X-Powered-By; proxy_hide_header Server; #APP Router=============== server { listen 9000 ssl; server_name localhost; ssl_certificate /usr/local/nginx/conf/yinwq.crt; ssl_certificate_key /usr/local/nginx/conf/yinwq.key; ssl_session_timeout 5m; ssl_protocols SSLv2 TLSv1 TLSv1.1 TLSv1.2; ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4:!DH:!DHE; ssl_prefer_server_ciphers on; error_page 497 301 https://$http_host$request_uri; location /ccc/ { proxy_pass http://cccserver/ccc/; client_max_body_size 1000m; } location /test/ { # default_type application/json; # return 200 '{"msg":"系统升级维护中,请稍后重试!","code":"2000","status":0}'; proxy_pass http://127.0.0.1:9100/test/; client_max_body_size 1000m; } } upstream cccserver{ server api.yinwq.com:8100; server api.yinwq.com:8101; } }

http 开头部分就不多说了,对应了HTTP协议的Head部分的信息,主要说server 部分内容:

listen 9000 ssl

表示监听 9000 端口,并开启SSL验证(https协议),默认 https 是 443 端口。

如果配置了 443 端口,则在 https 的域名后,无需指定端口号了。

ssl_certificate /usr/local/nginx/conf/yinwq.crt;
ssl_certificate_key /usr/local/nginx/conf/yinwq.key;
ssl_session_timeout 5m;
ssl_protocols SSLv2 TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4:!DH:!DHE;
ssl_prefer_server_ciphers on;

SSL证书对应的物理路径(crt 和 key 两个文件),超时时间,支持的协议,支持的加密方式,服务端控制加密模式。

error_page 497 301 https://$http_host$request_uri;

URL转发控制

location /ccc/ {
        proxy_pass   http://cccserver/ccc/;  
        client_max_body_size  1000m;
    }

路径中含有 /cdc/ 后的转发控制内容:转到 cdcserver 负载均衡服务组,追加加 /cdc/ 路径:

location /test/ {
#        default_type application/json;
#        return 200 '{"msg":"系统升级维护中,请稍后重试!","code":"2000","status":0}';

        proxy_pass   http://127.0.0.1:9100/test/;  
        client_max_body_size  1000m;
    }

路径中含有 /test/ 后的转发到本机9100端口 /wear/ 应用中。

如果把上两行注释更换下面的两行上,则直接返回设定好的 JSON 格式的提示内容,用于子应用升级、更新等。

upstream cdcserver{  
        server 192.168.100.100:8100;
        server 192.168.100.100:8101;
}

此部分就是上面 /ccc/ 转发中定义的 负载均衡服务组的内容,结合上面的全部内容组合起来看,实际上是转发到了 http://192.168.100.100 服务器上的 8100 和 8101 端口。

这里也只有两个服务做了负载均衡,可以按需要设置更多。

 

三、错误汇总

Starting nginx (via systemctl):  Job for nginx.service failed because the control process exited with error code. See "systemctl status nginx.service" and "journalctl -xe" for details.

输入 systemctl status nginx.service 查看详情,发现有库文件找不到:

输入 ldd $(which /usr/local/nginx/sbin/nginx) 跟踪库文件详情:

果然在系统库文件目录 /lib64/ 里有对应的库文件未找到,再次找类似同名库文件:find / -name libpcre2-8*

 发现文件是有的,只是目录对不上。那就是一个软链就搞定了。

果然,启动成功了。

有类似库文件问题的,都一样处理。

posted @ 2023-03-15 15:04  Java365  阅读(558)  评论(0编辑  收藏  举报