Linux 安裝及配置 Nginx + ftp 服務器

Nginx 安裝及配置php

1、Nginx 簡介:html

      Nginx("engine x") 是一款是由俄羅斯的程序設計師 Igor Sysoev 所開發高性能的 Web和 反向代理服務器,也是一個 IMAP/POP3/SMTP 代理服務器。在高鏈接併發的狀況下,Nginx 是 Apache 服務器不錯的替代品。是 C 語言編寫的,建議在 Linux 運行。linux

2、環境軟件版本準備:nginx

系統平臺:CentOS release 6.6 (Final) 64位。c++

Nginx:nginx-1.10.3.tar.gz     下載地址: http://nginx.org/download/nginx-1.10.3.tar.gz正則表達式

PCRE:pcre-8.35.tar.gz   下載地址: http://downloads.sourceforge.net/project/pcre/pcre/8.35/pcre-8.35.tar.gz算法

3、安裝編譯工具及庫文件:vim

[root@localhost ~]# yum -y install make zlib zlib-devel gcc-c++ libtool  openssl openssl-devel

gcc:安裝 nginx 須要先將官網下載的源碼進行編譯,編譯依賴 gcc 環境。安全

zlib:zlib 庫提供了不少種壓縮和解壓縮的方式,nginx 使用 zlib 對 http 包的內容進行 gzip。服務器

openssl:OpenSSL 是一個強大的安全套接字層密碼庫,囊括主要的密碼算法、經常使用的密鑰和證書封裝管理功能及SSL協議,並提供豐富的應用程序供測試或其它目的使用。nginx 不只支持http 協議,還支持 https(即在 ssl 協議上傳輸 http),因此須要在 linux 安裝 openssl 庫。

PCRE:PCRE(Perl Compatible Regular Expressions) 是一個 Perl 庫,包括 perl 兼容的正則表達式庫。nginx 的 http 模塊使用 pcre 來解析正則表達式,因此須要在 linux 上安裝 pcre庫。

安裝 PCRE:

1.解壓安裝包

[root@localhost moudles]# tar -zxvf  pcre-8.35.tar.gz -C ../softwares/

2.進入安裝目錄:

[root@localhost moudles]# cd /opt/softwares/pcre-8.35/

3.編譯安裝:

[root@localhost pcre-8.35]# ./configure
[root@localhost pcre-8.35]# make && make install

4.查看 pcre 版本:

[root@localhost pcre-8.35]# pcre-config ––version

4、Nginx 安裝:

1.解壓安裝包:

[root@localhost moudles]# tar -zxvf nginx-1.10.3.tar.gz -C ../softwares/

2.進入安裝目錄:

[root@localhost moudles]# cd /opt/softwares/nginx-1.10.3/

3.編譯安裝:注意:編譯時將臨時文件目錄指定爲 /var/temp/nginx ,  須要在/var 目錄下遞歸建立 /temp 和 /nginx 文件夾。

 ./configure \

--prefix=/usr/local/nginx \

--pid-path=/var/run/nginx/nginx.pid \

--lock-path=/var/lock/nginx.lock \

--error-log-path=/var/log/nginx/error.log \

--http-log-path=/var/log/nginx/access.log \

--with-http_gzip_static_module \

--http-client-body-temp-path=/var/temp/nginx/client \

--http-proxy-temp-path=/var/temp/nginx/proxy \

--http-fastcgi-temp-path=/var/temp/nginx/fastcgi \

--http-uwsgi-temp-path=/var/temp/nginx/uwsgi \

--http-scgi-temp-path=/var/temp/nginx/scgi

[root@localhost nginx-1.10.3]# make && make install

 4.啓動報錯修復:

[root@localhost nginx-1.10.3]# cd /usr/local/nginx/sbin/

[root@localhost sbin]# ./nginx
./nginx: error while loading shared libraries: libpcre.so.1: cannot open shared object file: No such file or directory

從錯誤看是缺乏 lib 包致使的,進一步查看一下:

[root@localhost sbin]# ldd $(which /usr/local/nginx/sbin/nginx)
linux-vdso.so.1 => (0x00007fff87dff000)
libdl.so.2 => /lib64/libdl.so.2 (0x000000378a000000)
libpthread.so.0 => /lib64/libpthread.so.0 (0x0000003789c00000)
libcrypt.so.1 => /lib64/libcrypt.so.1 (0x000000378d400000)
libpcre.so.1 => not found
libcrypto.so.10 => /usr/lib64/libcrypto.so.10 (0x0000003bb6c00000)
libz.so.1 => /lib64/libz.so.1 (0x0000003789400000)
libc.so.6 => /lib64/libc.so.6 (0x0000003789800000)
/lib64/ld-linux-x86-64.so.2 (0x0000003789000000)
libfreebl3.so => /lib64/libfreebl3.so (0x000000378d000000)

從上面的信息能夠看出 libpcre.so.1 => not found ,也就是沒有找到  libpcre.so.1, 咱們進入 /lib64 本身手動連接下。

[root@localhost sbin]# cd /lib64/
[root@localhost lib64]# ln -s libpcre.so.0.0.1 libpcre.so.1

5.查看 nginx 版本:

[root@localhost lib64]# cd /usr/local/nginx/sbin/
[root@localhost sbin]# ./nginx -v
nginx version: nginx/1.10.3

6.nginx 經常使用命令:

複製代碼
## 啓動 nginx [root@localhost sbin]# ./nginx  ## 中止 nginx ## -s都是採用向 Nginx 發送信號的方式 [root@localhost sbin]# ./nginx -s stop [root@localhost sbin]# ./nginx -s quit ## Nginx 重載配置 [root@localhost sbin]# ./nginx -s reload
複製代碼

7.設置防火牆:

CentOS 默認是不開放 80 端口的,這樣致使了配置完 Nginx 只能在本機訪問(127.0.0.1) 局域網內訪問不了 。

① 查看防火牆狀態:

[root@localhost sbin]# service iptables status
表格:filter
Chain INPUT (policy ACCEPT)
num target prot opt source destination
1 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
2 ACCEPT icmp -- 0.0.0.0/0 0.0.0.0/0
3 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0
4 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:22
5 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:3306
6 REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited

Chain FORWARD (policy ACCEPT)
num target prot opt source destination
1 REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited

Chain OUTPUT (policy ACCEPT)
num target prot opt source destination

② 開放 80 端口:

[root@localhost sbin]# vim /etc/sysconfig/iptables
# Firewall configuration written by system-config-firewall
# Manual customization of this file is not recommended.
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 3306 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT

③ 重啓防火牆:

[root@localhost sbin]# service iptables restart
iptables:將鏈設置爲政策 ACCEPT:filter [肯定]
iptables:清除防火牆規則: [肯定]
iptables:正在卸載模塊: [肯定]
iptables:應用防火牆規則: [肯定]

 

8.nginx啓動成功狀態:

FTP 安裝及配置

1、安裝vsftpd組件:

[root@localhost conf]# yum -y install vsftpd

2、添加一個 FTP 用戶:此用戶就是用來登錄 FTP 服務器用的。

① 建立用戶:

[root@localhost conf]# useradd ftpuser

建立完用戶,能夠用這個用戶登陸,記得用普通登錄,最好不要匿名登錄了。

② 查看是否建立成功:

[root@localhost home]# ls
ftpuser lost+found

③ 爲帳戶添加密碼:建議 8 位以上密碼

[root@localhost ~]# passwd ftpuser
更改用戶 ftpuser 的密碼 。
新的 密碼:
從新輸入新的 密碼:
passwd: 全部的身份驗證令牌已經成功更新。

3、設置防火牆:

FTP 服務器默認端口爲 21, 而 CentOS 默認是不開放 21 端口的。

① 開放 21 端口:

[root@localhost ~]# vim /etc/sysconfig/iptables
# Firewall configuration written by system-config-firewall
# Manual customization of this file is not recommended.
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 3306 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 21 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT

② 重啓防火牆:

[root@localhost ~]# service iptables restart
iptables:將鏈設置爲政策 ACCEPT:filter [肯定]
iptables:清除防火牆規則: [肯定]
iptables:正在卸載模塊: [肯定]
iptables:應用防火牆規則: [肯定]

4、修改 SeLinux:

外網能夠訪問,可是沒有返回目錄,也上傳不了。

① 查看狀態:

[root@localhost ~]# getsebool -a | grep ftp
allow_ftpd_anon_write --> off
allow_ftpd_full_access --> off
allow_ftpd_use_cifs --> off
allow_ftpd_use_nfs --> off
ftp_home_dir --> off
ftpd_connect_db --> off
ftpd_use_fusefs --> off
ftpd_use_passive_mode --> off
httpd_enable_ftp_server --> off
tftp_anon_write --> off
tftp_use_cifs --> off
tftp_use_nfs --> off

注意: 標註兩行爲 off,表明沒有開啓外網的訪問。

② 開啓外網訪問:

[root@localhost ~]# setsebool -P allow_ftpd_full_access on
[root@localhost ~]# setsebool -P ftp_home_dir on
[root@localhost ~]# getsebool -a | grep ftp
allow_ftpd_anon_write --> off
allow_ftpd_full_access --> on
allow_ftpd_use_cifs --> off
allow_ftpd_use_nfs --> off
ftp_home_dir --> on
ftpd_connect_db --> off
ftpd_use_fusefs --> off
ftpd_use_passive_mode --> off
httpd_enable_ftp_server --> off
tftp_anon_write --> off
tftp_use_cifs --> off
tftp_use_nfs --> off

已經開啓。

5、關閉匿名訪問:

將 /etc/vsftpd/vsftpd.conf 文件中 anonymous_enable=YES 改爲 NO

[root@localhost vsftpd]# vim /etc/vsftpd/vsftpd.conf 

6、開啓被動模式:

① 設置端口範圍:被動模式默認是開啓的,可是咱們要設置一個端口範圍,在 vsftpd.conf 文件結尾加上端口範圍, 如:

pasv_min_port=30000 
pasv_max_port=30999 

② 重啓 vsftpd:

[root@localhost vsftpd]# service vsftpd restart
關閉 vsftpd: [失敗]
爲 vsftpd 啓動 vsftpd: [肯定]

③ 設置防火牆端口:

[root@localhost vsftpd]# vim /etc/sysconfig/iptables
# Firewall configuration written by system-config-firewall
# Manual customization of this file is not recommended.
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 3306 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 21 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 30000:30999 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT

④ 重啓防火牆:

[root@localhost vsftpd]# service iptables restart
iptables:將鏈設置爲政策 ACCEPT:filter [肯定]
iptables:清除防火牆規則: [肯定]
iptables:正在卸載模塊: [肯定]
iptables:應用防火牆規則: [肯定]

7、設置開機自啓 vsftpd FTP服務:

[root@localhost vsftpd]# chkconfig vsftpd on

配置 Nginx + FTP 服務器

1、配置Nginx 服務器:

1. 進入nginx 配置文件目錄:

[root@localhost vsftpd]# cd /usr/local/nginx/conf/
[root@localhost conf]# ls
fastcgi.conf fastcgi_params.default mime.types nginx.conf.default uwsgi_params
fastcgi.conf.default koi-utf mime.types.default scgi_params uwsgi_params.default
fastcgi_params koi-win nginx.conf scgi_params.default win-utf

2. 修改配置文件:有兩種方式

①方式一:在配置文件server{}中location /{} 修改配置

1  #默認請求 2 location / { 3 root /home/ftpuser/www;#定義服務器的默認網站根目錄位置 4 index index.html index.php index.htm;#定義首頁索引文件的名稱 5 } 

②方式二:在http{}內配置新服務

複製代碼
 1 server {  2 listen 8080;  3  server_name localhost;  4  5 #charset utf-8;  6  7 #access_log logs/host.access.log main;  8  9 #默認請求 10 location / { 11 root /home/ftpuser/www;#定義服務器的默認網站根目錄位置 12 index index.html index.php index.htm;#定義首頁索引文件的名稱 13  } 14 } 
複製代碼

 部署驗證

 

出現403問題。

解決方案:

1.查看配置文件中路徑是否配置成功:

 location / {
            root   /home/ftpuser/www; index index.html index.htm; }

[root@localhost conf]# cd /home/ftpuser/www/
[root@localhost www]# pwd
/home/ftpuser/www

 兩個路徑徹底匹配,說明路徑沒有問題。

2.查看路徑中是否存在文件:

[root@localhost www]# ls
index.html

存在文件,能夠排除是文件問題。

3.排查權限問題:

複製代碼
[root@localhost conf]# cat nginx.conf #user nobody; worker_processes 1; #error_log logs/error.log; #error_log logs/error.log notice; #error_log logs/error.log info; #pid logs/nginx.pid;  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;  sendfile on; #tcp_nopush on; #keepalive_timeout 0; keepalive_timeout 65; #gzip on;  server { listen 80; server_name localhost; #charset koi8-r; #access_log logs/host.access.log main;  location / { root /home/ftpuser/www; index index.html index.htm; } #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; #}  } # another virtual host using mix of IP-, name-, and port-based configuration # #server { # listen 8000; # listen somename:8080; # server_name somename alias another.alias; # location / { # root html; # index index.html index.htm; # } #} # HTTPS server # #server { # listen 443 ssl; # server_name localhost; # ssl_certificate cert.pem; # ssl_certificate_key cert.key; # ssl_session_cache shared:SSL:1m; # ssl_session_timeout 5m; # ssl_ciphers HIGH:!aNULL:!MD5; # ssl_prefer_server_ciphers on; # location / { # root html; # index index.html index.htm; # } #}  }
複製代碼

 發現用戶權限沒有開啓。咱們添加須要的用戶。

[root@localhost conf]# vim nginx.conf

#user nobody;
user root;

從新加載 nginx 配置:

[root@localhost conf]# cd ../sbin/
[root@localhost sbin]# ./nginx -s reload

從新驗證

相關文章
相關標籤/搜索