以非root權限安裝nginx及運行


本章主要講如何在無root權限(包含無sudo權限)條件下於centos命令行中安裝nginx以及在大於1024的端口(這里用8080)上運行。

1. 安裝

兩種方式,一是下載預編譯好的rpm包安裝,二是下載源碼后自己編譯。

如果是通過下載rpm方式安裝,首先要找對應centos版本的rpm包。

通過命令

cat /etc/*release*

的輸出可以看到centos系統的版本,在我能訪問的某個雲主機上顯示如下:

 

使用curl -G <URL>命令來瀏覽網址http://nginx.org/packages/centos/$ver的內容,其中$ver為centos版本值為5或6或7(其實這個也可通過瀏覽網址http://nginx.org/packages/centos/)查看到,6.x版本對應是6,故瀏覽http://nginx.org/packages/centos/6,有如下輸出:

 

找到對應cpu架構,64位cpu為x86_64,因此瀏覽http://nginx.org/packages/centos/6/x86_64/,進入RPMS目錄(即瀏覽http://nginx.org/packages/centos/6/x86_64/RPMS/),查看其中的超鏈接,如:<a href=“nginx-1.8.1-1.el6.ngx.x86_64.rpm”>nginx-1.8.1-1.el6.ngx.x86_64.rpm</a>,選擇其中的版本(這里是版本1.8.1),根據超鏈(href="...")使用wget下載:

wget http://nginx.org/packages/centos/6/x86_64/RPMS/nginx-1.8.1-1.el6.ngx.x86_64.rpm

完成后在當前目錄有對應rpm文件,但是不能直接安裝改rpm,因為權限限制,因此我們不安裝,而是提取出其中的二進制(及其他必要文件),通過以下命令實現:

rpm2cpio ctags-5.8-2.el6.x86_64.rpm |cpio -idvm

此時當前文件夾下多出etc、usr等文件夾,其中usr/sbin/nginx就是nginx的二進制文件,可選擇性地將其移動到~/bin/目錄下。

至此nginx的二進制文件已有,算是”安裝“上了。

2. 配置及運行

nginx根據默認配置會導致讀寫需要root權限的文件和目錄,因此需要提供自定義配置文件。新建一個nginx.conf文件,填入以下內容:

# Usage: nginx -c /path/to/this/nginx.conf error_log /tmp/error.log; pid /tmp/nginx.pid; worker_processes 1; events { worker_connections 1024; } http { # Set an array of temp and cache file options that will otherwise default to # restricted locations accessible only to root. client_body_temp_path /tmp/client_body; fastcgi_temp_path /tmp/fastcgi_temp; proxy_temp_path /tmp/proxy_temp; scgi_temp_path /tmp/scgi_temp; uwsgi_temp_path /tmp/uwsgi_temp; tcp_nopush on; tcp_nodelay on; keepalive_timeout 65; types_hash_max_size 2048; #include /etc/nginx/mime.types; index index.html index.htm index.php; log_format main '$remote_addr - $remote_user [$time_local] $status '

    '"$request" $body_bytes_sent "$http_referer" '

    '"$http_user_agent" "$http_x_forwarded_for"'; default_type application/octet-stream; server { # IPv4. listen 8080; # IPv6. #listen [::]:8080 default ipv6only=on; root /path/to/html/root; access_log /tmp/access.log; error_log /tmp/error.log; location / { # First attempt to serve request as file, then as directory, then fall # back to index.html. try_files $uri $uri/ /index.html; } } }

 

我們需要告訴nginx我們的html(web應用的根目錄)放在哪里,通過修改文件結構中http塊下server塊中的root實現(即上例文件中的root /path/to/html/root; 行,注意行末有分號),這里最好配置為絕對路徑。nginx在軟件包中提供了一個很簡單的html頁面,在解壓出中的目錄usr/share/html中,可以使用這個html目錄測試。配置文件中的大部分值為路徑,我們的目的就是要將覆蓋默認路徑,改到我們有權限讀寫的路徑中(上示例文件中大部分配置到/tmp目錄去了)。

通過命令行參數告知nginx我們的配置文件(而非使用默認的配置文件):

 

nginx -c /home/xxxx/nginx.conf #配置文件的絕對路徑

 

nginx有可能仍會提示無權限打開/var/log/nginx/error.log,無視之,可使用pgrep -a nginx看到nginx已經運行。通過curl <本機ip或localhost>:8080看到nginx自己做的歡迎頁面,我這里的顯示如下:

 

至此,nginx在無root權限下成功運行。

 

通過下載源碼編譯安裝方式,一定要記得配置前綴路徑,否則會因無權限寫入/usr, /etc等默認路徑下的文件而失敗,編譯后的目錄結構上面由rpm包解壓出的結構類似,配置及運行的過程一樣。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM