Setting up SFTP with Nginx: Difference between revisions

From LemonWiki共筆
Jump to navigation Jump to search
(Created page with " = Nginx Directory Permissions and Symbolic Link Configuration Guide = == Environment Overview == * Using SFTP to upload files to personal directory * Personal directory linked to website root via symbolic link * Files accessible through public web URL after upload === Example SFTP Upload Process === # Upload file to personal directory: <code>/home/your_user/public_folder/</code> # File automatically reflects in website directory: <code>/usr/share/nginx/html/folder/...")
 
mNo edit summary
Line 27: Line 27:
<li>Check Directory Structure and Permissions</li></ol>
<li>Check Directory Structure and Permissions</li></ol>


<syntaxhighlight lang="bash"># Check website root directory
<pre lang="bash"># Check website root directory
sudo ls -lht /usr/share/nginx/html/
sudo ls -lht /usr/share/nginx/html/
# Check target directory
# Check target directory
sudo ls -lht /usr/share/nginx/html/folder/</syntaxhighlight>
sudo ls -lht /usr/share/nginx/html/folder/</pre>
<ol start="3" style="list-style-type: decimal;">
<ol start="3" style="list-style-type: decimal;">
<li>Check Nginx Configuration</li></ol>
<li>Check Nginx Configuration</li></ol>


<syntaxhighlight lang="bash"># Check nginx config
<pre lang="bash"># Check nginx config
sudo nano /etc/nginx/nginx.conf
sudo nano /etc/nginx/nginx.conf
# Or check site config
# Or check site config
sudo nano /etc/nginx/sites-available/default</syntaxhighlight>
sudo nano /etc/nginx/sites-available/default</pre>
Basic nginx configuration should include:
Basic nginx configuration should include:


<syntaxhighlight lang="nginx">server {
<pre lang="nginx">server {
     listen 80;
     listen 80;
     server_name your_domain;
     server_name your_domain;
Line 50: Line 50:
         try_files $uri $uri/ =404;
         try_files $uri $uri/ =404;
     }
     }
}</syntaxhighlight>
}</pre>
<span id="common-issues"></span>
<span id="common-issues"></span>
== Common Issues: ==
== Common Issues: ==
Line 62: Line 62:
# Check Nginx Error Log
# Check Nginx Error Log


<syntaxhighlight lang="bash">sudo tail /var/log/nginx/error.log</syntaxhighlight>
<pre lang="bash">sudo tail /var/log/nginx/error.log</pre>
Possible error message:
Possible error message:


Line 69: Line 69:
<li>Set User Directory Permissions</li></ol>
<li>Set User Directory Permissions</li></ol>


<syntaxhighlight lang="bash"># Ensure user directory is accessible
<pre lang="bash"># Ensure user directory is accessible
sudo chmod 755 /home/your_user</syntaxhighlight>
sudo chmod 755 /home/your_user</pre>
<ol start="3" style="list-style-type: decimal;">
<ol start="3" style="list-style-type: decimal;">
<li>Set Website Directory Permissions</li></ol>
<li>Set Website Directory Permissions</li></ol>


<syntaxhighlight lang="bash"># Ensure website directory is accessible
<pre lang="bash"># Ensure website directory is accessible
sudo chmod 755 /home/your_user/public_folder</syntaxhighlight>
sudo chmod 755 /home/your_user/public_folder</pre>
<ol start="4" style="list-style-type: decimal;">
<ol start="4" style="list-style-type: decimal;">
<li>(optional) Set File Permissions</li></ol>
<li>(optional) Set File Permissions</li></ol>


<syntaxhighlight lang="bash"># Set file read permissions
<pre lang="bash"># Set file read permissions
chmod 644 /usr/share/nginx/html/folder/your_file.png</syntaxhighlight>
chmod 644 /usr/share/nginx/html/folder/your_file.png</pre>
<span id="permission-details"></span>
<span id="permission-details"></span>
== Permission Details ==
== Permission Details ==
Line 98: Line 98:
<li><p>Public URL format: <nowiki>http://your_domain/folder/file.png</nowiki></p></li>
<li><p>Public URL format: <nowiki>http://your_domain/folder/file.png</nowiki></p></li>
<li><p>If still inaccessible after configuration:</p>
<li><p>If still inaccessible after configuration:</p>
<syntaxhighlight lang="bash"># Reload nginx configuration
<pre lang="bash"># Reload nginx configuration
sudo systemctl reload nginx</syntaxhighlight></li></ol>
sudo systemctl reload nginx</pre></li></ol>


== Important Notes ==
== Important Notes ==

Revision as of 14:05, 22 January 2025

Nginx Directory Permissions and Symbolic Link Configuration Guide

Environment Overview

  • Using SFTP to upload files to personal directory
  • Personal directory linked to website root via symbolic link
  • Files accessible through public web URL after upload

Example SFTP Upload Process

  1. Upload file to personal directory: /home/your_user/public_folder/
  2. File automatically reflects in website directory: /usr/share/nginx/html/folder/
  3. Access via URL: http://your_domain/folder/file.png

Configuration Steps

  1. Verify Symbolic Link
# Check if symbolic link is correct
ls -l /home/your_user/public_folder

Expected output:

lrwxrwxrwx 1 your_user your_user 26 Jan 20 15:00 /home/your_user/public_folder -> /usr/share/nginx/html/folder
  1. Check Directory Structure and Permissions
# Check website root directory
sudo ls -lht /usr/share/nginx/html/
# Check target directory
sudo ls -lht /usr/share/nginx/html/folder/
  1. Check Nginx Configuration
# Check nginx config
sudo nano /etc/nginx/nginx.conf
# Or check site config
sudo nano /etc/nginx/sites-available/default

Basic nginx configuration should include:

server {
    listen 80;
    server_name your_domain;

    root /usr/share/nginx/html;
    index index.html;

    location / {
        try_files $uri $uri/ =404;
    }
}

Common Issues:

  • Specific directories return 404 (files exist)
  • Files uploaded via SFTP not accessible via web
  • Nginx error log shows permission issues

Solution: Adjust Permission Settings

  1. Check Nginx Error Log
sudo tail /var/log/nginx/error.log

Possible error message:

[crit] stat() "[path]/file.png" failed (13: Permission denied)
  1. Set User Directory Permissions
# Ensure user directory is accessible
sudo chmod 755 /home/your_user
  1. Set Website Directory Permissions
# Ensure website directory is accessible
sudo chmod 755 /home/your_user/public_folder
  1. (optional) Set File Permissions
# Set file read permissions
chmod 644 /usr/share/nginx/html/folder/your_file.png

Permission Details

  • chmod 755 (directories):
    • Owner: read, write, execute (rwx)
    • Group: read and execute (r-x)
    • Others: read and execute (r-x)
  • chmod 644 (files):
    • Owner: read, write (rw-)
    • Group: read (r–)
    • Others: read (r–)

Testing and Verification

  1. Public URL format: http://your_domain/folder/file.png

  2. If still inaccessible after configuration:

    # Reload nginx configuration
    sudo systemctl reload nginx

Important Notes

  1. Permission changes take effect immediately, no nginx restart needed
  2. Entire path needs proper execute permissions
  3. New files need correct permissions set
  4. Ensure symbolic links remain intact
  5. Verify files are uploaded to correct location