我的博客

CentOS 7 下编译安装nginx并配置服务

目录
  1. 下载源码
  2. 编译和安装
  3. 启动
  4. 开机自动启动
  5. 配置文件参考
  6. 错误解决

下载源码

到发布页面找一个版本的源码,http://nginx.org/download/

我选择了 http://nginx.org/download/nginx-1.17.0.tar.gz 修改时间是2019年5月21日

这个站有IPv6,但速度较慢。

在服务器上下载

wget http://nginx.org/download/nginx-1.17.0.tar.gz

解压源码

tar -xzvf nginx-1.17.0.tar.gz

编译和安装

参照官方文档 http://nginx.org/en/docs/configure.html

  1. 安装依赖

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

  2. 然后切换到源码目录下

    cd nginx-1.17.0

  3. 执行

    ./configure --with-http_ssl_module

    这步可能因为缺少库或者编译工具失败,请注意是否有错误提示,如果没有,再执行

  4. 编译

    make

  5. 安装

    make install

启动

执行

/usr/local/nginx/sbin/nginx

如果没有报错就启动成功了,默认监听 0.0.0.0:80

然后用wget测试一下

wget -O - 127.0.0.1

可以看到本地能访问到,但是其他机器可能访问不到,因为还有防火墙。

永久开放80端口

1
2
firewall-cmd --permanent --zone=public --add-port=80/tcp
firewall-cmd --reload

此时其他主机也可以访问到了

开机自动启动

新建文件,

vi /lib/systemd/system/nginx.service

写入以下内容

1
2
3
4
5
6
7
8
9
10
11
12
13
[Unit]
Description=nginx
After=network.target

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

[Install]
WantedBy=multi-user.target

执行

systemctl enable nginx.service

此时服务设置为开机自动启动,另外可以使用以下命令手动控制

1
2
3
4
systemctl start nginx.service   # 启动
systemctl stop nginx.service # 停止
systemctl status nginx.service # 查看状态
systemctl disable nginx.service #终止开机自启

配置文件参考

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
server {
listen 8000 ssl;
server_name xxx.codeplot.top;
# ssl on;
ssl_certificate ssl.crt;
ssl_certificate_key ssl.key;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
ssl_prefer_server_ciphers on;
#charset koi8-r;
#access_log logs/host.access.log main;
#location / {
# root html;
# index index.html index.htm;
#}
location / {
proxy_pass http://127.0.0.1:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}

#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;
}

# proxy the PHP scripts to Apache listening on 127.0.0.1:80
#
#location ~ \.php$ {
# proxy_pass http://127.0.0.1;
#}

# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
#location ~ \.php$ {
# root html;
# fastcgi_pass 127.0.0.1:9000;
# fastcgi_index index.php;
# fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
# include fastcgi_params;
#}

# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
#location ~ /\.ht {
# deny all;
#}
}

错误解决

nginx: [warn] the “ssl” directive is deprecated, use the “listen … ssl” directive instead in /usr/local/nginx/conf/nginx.conf:37

新版本 nginx 配置文件中将不支持 ssl on;

应该改为 listen 端口号 ssl;

评论无需登录,可以匿名,欢迎评论!